Question

J'ai une situation comme celle-ci:

Tableau: FunTable

ItemKey     ItemName     ItemPriceEffectiveDate    ItemPrice
11          ItemA        6/6/2009                  $500
12          ItemA        6/15/2009                 $550
13          ItemA        9/9/2009                  $450
14          ItemB        3/9/2009                  $150
15          ItemB        9/9/2009                  $350

Je dois effectuer les opérations suivantes:

Select
  ItemName as ItemDescription,
  (SELECT THE PRICE WITH THE LATEST EFFECTIVE DATE FROM TODAY THROUGH THE PAST)
FROM
  FunTable
GROUP BY
  ItemName

Le résultat devrait être le suivant:

ItemA $550
ItemB $150

Ainsi, les dates d'entrée en vigueur des prix peuvent aller de 5 ans à 5 ans. Je veux choisir le prix qui est efficace aujourd'hui ou dans le passé (pas dans le futur! Ce n'est pas encore efficace). Ce doit être le "plus récent" prix effectif.

Avez-vous des idées?

Était-ce utile?

La solution

Quelque chose comme ça (vous n'avez pas vos noms, mais vous avez l'idée) ...

WITH A (Row, Price) AS
(
  SELECT Row_Number() OVER (PARTITION BY Item ORDER BY Effective DESC) AS [RN],
         Price FROM Table2
  WHERE Effective <= GETDATE()
)
SELECT * FROM A WHERE A.Row = 1

Autres conseils

select ft.ItemName,
       price
from   (select   ItemName,
                 Max(ItemPriceEffectiveDate) as MaxEff
        from     FunTable
        where    ItemPriceEffectiveDate <= GETDATE()
        group by ItemName) as d,
       FunTable as ft
where  d.MaxEff = ft.ItemPriceEffectiveDate; 

Modifier: la requête a été modifiée pour fonctionner, en supposant que le prix ne change pas plus d'une fois par jour.

Je ne connais pas la réponse par cœur, mais je suppose que vous voulez dire qu'il faut utiliser une sous-requête, ce qui pourrait en faire une requête très coûteuse.

Il peut être plus facile d'extraire toutes les données d'un code d'utilisation pour le post-traiter vous-même.

devrait fonctionner si vous le faites

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top