SQL语法 - 分组依据...自定义聚合功能?
我有这样的情况:SQL语法 - 分组依据...自定义聚合功能?
表: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;
编辑:更改查询实际工作,假设价格每天不会超过一次。
应该工作,如果你做
SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
你也想要得到的价格。这意味着你需要按价格分组。这不会给你你需要什么(除非价格永远不会改变:) – nos 2009-06-23 22:21:12
是的,这是正确的 – 2009-06-23 22:25:25
我会说这是最优雅的解决方案 – 2009-06-23 22:27:48