SQL構文—グループ化…カスタム集計機能?
-
10-07-2019 - |
質問
このような状況があります:
表: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
所属していません StackOverflow