Bonjour,

Je débute tout juste en SQL server express, c'est etonnant tout ce que ca
apporte... en particulier les procédures stockées..

Pour ma part, voici le soucis. J'ai une table contenant 3 champs :
Code / Date / Valeur
Je cherche, pour une date donnée, à obtenir la valeur la plus récente
pour chaque Code..
En Access, je passais par 2 requêtes successives :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT Code, Max(Date) AS MaxDeDate
FROM MyDATA
GROUP BY Code
HAVING ((Max(Date))<#8/1/2007#);
Pour récupérer les dates les plus récentes pour chaque code... Ensuite,
je reliai cette requête avec la table de départ pour associer les champs
Valeur avec les champs MaxDeDate..

1ere question : est-il possible de faire plus simple, cad en une seule fois ?
J'ai le sentiment qu'avec les sous-requêtes c'est possible mais je n'y arrive
pas...

Par ailleurs, j'ai reproduit ce schéma sous forme d'une procédure stockée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
CREATE PROCEDURE dbo.GetLastValeur
				(
				   @Date datetime
				)
AS
	DECLARE @LastDate TABLE
	(
		LastCode nchar(15),
		LastDate datetime
	)
	DECLARE @Result TABLE
	(
		R_Code nchar(15),
		R_Date datetime,
		R_Valeur real
	)
BEGIN
	INSERT INTO @LastDate
	SELECT a.Code, Max(a.Date) AS MaxDeDate
	FROM dbo.MyDATA AS a
	GROUP BY a.Code
	HAVING (((Max(a.Date))<@Date))
 
	INSERT INTO @Result
	SELECT b.LastCode, b.LastDate, c.Valeur
	FROM @LastDate AS b, dbo.MyDATA AS c
	GROUP BY b.LastCode, b.LastDate, c.Valeur, c.Code, c.Date
	HAVING (b.LastCode = c.Code AND b.LastDate = c.Date)
 
	SELECT * FROM @Result
END
GO
Qui respecte donc ces 2 étapes décrites au dessus. Est-il possible de faire
plus simple, plus rapide, plus fiable ? Ou ma solution est-elle convenable ?..

Merci de votre aide, je débute pleinement en SQL Server mais je sens que
ses possibilités sont plus qu'adaptées à mes besoins...

Bonne journée.