我有这样的情况:
表: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年不等。我想选择今天或过去有效的价格(不是在未来!它还没有效果)。它必须是“最近的”有效价格。
有什么想法吗?
答案 0 :(得分:2)
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 :(得分:2)
这样的事情(没有你的名字,但你明白了)......
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
答案 2 :(得分:0)
我不知道答案,但我的猜测是你需要使用一个子查询,这可能会使它成为一个非常昂贵的查询。
使用代码中的所有数据可能更容易自行进行后处理。
答案 3 :(得分:0)
应该有用
SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName