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 :
Pour récupérer les dates les plus récentes pour chaque code... Ensuite,
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#);
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 :
Qui respecte donc ces 2 étapes décrites au dessus. Est-il possible de faire
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
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.
Partager