我无法从中获取最新数据。
我有一张包含这些数据的表格:
ItemId, ShipmentId, Date
物品可以多次运输,货件可以包含多个物品。 我需要获得每件商品的最新货物。
表格如下:
11 12 2011-05-13
11 2 2011-07-01
12 2 2000-03-02
...
结果应为
11 2 2011-07-01
12 2 2000-03-02
我找不到独家解决方案。 如何获得每件商品的最新货件?
答案 0 :(得分:2)
假设您正在使用支持排名功能的数据库引擎,请使用CTE或子查询来排序结果:
;With OrderedItems as (
select ItemId,ShipmentId,Date,
ROW_NUMBER() OVER (PARTITION BY ItemId ORDER By Date desc) as rn
from ItemsTable
)
select * from OrderedItems where rn = 1
答案 1 :(得分:1)
select t1.ItemId, t1.ShipmentId, t1.Date
from tab t1
join (
select ItemId, max(Date) as Date
from tab
group by ItemId
) t on t1.ItemId = t.ItemId and t1.Date = t.Date
答案 2 :(得分:0)
没有对它进行测试,但这个总体思路应该有效:
SELECT * FROM YOUR_TABLE T1
WHERE
NOT EXISTS (
SELECT * FROM YOUR_TABLE T2
WHERE T1.ItemId = T2.ItemId AND T1.Date < T2.Date
)
用简单的英语:选择行,使得没有其他行具有相同的ItemId
但后来Date
。
答案 3 :(得分:0)
你也可以在CTE中使用rank()
;With Ordered as (
select ItemId,ShipmentId,dates,
rank() OVER ( PARTITION by itemID ORDER By dates desc) as DateRank
from ItemsTable
)
select * from Ordered where DateRank = 1