从SQL获取最新数据

时间:2011-12-15 07:40:34

标签: sql

我无法从中获取最新数据。

我有一张包含这些数据的表格:

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

我找不到独家解决方案。 如何获得每件商品的最新货件?

4 个答案:

答案 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