1

我有这样的情况:

表: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 年。我想选择今天或过去有效的价格(不是将来!它还没有生效)。它必须是“最近的”有效价格。

有什么想法吗?

4

4 回答 4

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; 

编辑:将查询更改为实际工作,假设价格每天变化不超过一次。

于 2009-06-23T22:10:54.010 回答
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
于 2009-06-23T22:16:43.080 回答
0

我不知道我脑海中的答案,但我猜你的意思是需要使用子查询,这可能使它成为一个非常昂贵的查询。

在使用代码中提取所有数据以自己进行后处理可能会更容易。

于 2009-06-23T22:08:17.167 回答
0

如果你这样做应该可以

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
于 2009-06-23T22:11:31.280 回答