假设我有一个名为Item的表,其中包含在特定日期设置的具有价格的商品。
物品
id | date | price
---+------------+------
1 | 2014-01-01 | 1.09
1 | 2014-03-15 | 1.19
2 | 2014-04-02 | 2.75
1 | 2014-07-28 | 0.99
2 | 2014-08-07 | 2.35
3 | 2014-10-21 | 3.90
现在我想选择每件商品的当前价格(每件商品的最后一条记录):
WITH lastChange AS (
SELECT id, MAX(date) date
FROM Item
GROUP BY id
)
SELECT Item.id, Item.price
FROM Item
JOIN lastChange ON Item.id = lastChange.id AND Item.date = lastChange.date
,并提供:
id | price
---+------
1 | 0.99
2 | 2.35
3 | 3.90
我想知道是否有更好的方法来进行此选择。
答案 0 :(得分:1)
窗口函数
WITH t AS (
SELECT *
,MAX(date) OVER(PARTITION BY id) max_date_by_id
FROM Item
)
SELECT *
FROM t
WHERE date = max_date_by_id
交叉申请
SELECT *
FROM Item t
CROSS APPLY (
SELECT MAX(date) max_date_by_id
FROM Item
WHERE id = t.id
)
WHERE date = max_date_by_id