質問

このような状況があります:

表: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

次のことを行う必要があります:

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

出力は次のようになります:

ItemA $550
ItemB $150

したがって、価格の発効日は5年前から5年後までの範囲になります。現在または過去のいずれかで有効な価格を選択します(将来ではなく、まだ有効ではありません)。 「最新」でなければなりません。有効価格。

何か考えはありますか

役に立ちましたか?

解決

このようなもの(名前はありませんが、アイデアはわかります)...

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

他のヒント

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; 

編集:価格が1日に1回以上変更されないと仮定して、クエリが実際に機能するように変更しました。

頭の上の答えがわかりませんが、サブクエリを使用する必要があるので、非常に高価なクエリになる可能性があります。

使用コード内のすべてのデータをプルして、後処理する方が簡単な場合があります。

実行すれば動作するはずです

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top