Bonjour,
Je dois faire une requête assez complexe, je ne sais pas si quelqu'un pourra m'aider :
j'ai une table qui est de la forme ci dessous. Elle décrit des prévisions de prix pour des éléments par période:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ----------------- |Prices | --------------------------------------------- |ElementId |PeriodId | Prix | DeviseId --------------------------------------------- | 1 | 1 | 120 | 16 | 1 | 50 | 310 | 16 | 2 | 12 | 50 | 18
Et je voudrais faire un select qui effectue un report de ces prix dans le temps, c'est à dire obtenir :
J'y arrive bien sûr mais en faisant des sous-requêtes ce qui n'est pas très bon étant donné que ca concerne pas mal de lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 --------------------------------------------------------- |ElementId | PeriodId | Prix | DeviseId --------------------------------------------------------- | 1 | 1 | 120 | 16 | 1 | 2 | 120 | 16 | 1 | ... | 120 | 16 | 1 | 49 | 120 | 16 | 1 | 50 | 310 | 16 | 1 | ... | 310 | 16 | 2 | 12 | 50 | 18 | 2 | 13 | 50 | 18 | 2 | ... | 50 | 18
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT Element.Id, Period.Id, (SELECT TOP 1 Prix FROM Prices WHERE ElementId = Element.Id and PeriodId <= Period.Id ORDER BY PeriodId DESC) as Prix, (SELECT TOP 1 Devise FROM Prices WHERE ElementId = Element.Id and PeriodId <= Period.Id ORDER BY PeriodId DESC) as Devise, FROM Period cross join Element
Y'aurais-t-il un moyen plus efficace de faire ca ?
Merci d'avance!![]()
Partager