从SQL获取最新数据

问题描述:

我无法从中获取最新数据。从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 

我无法找到一个解决方案是排他性的。 如何获取每件商品的最新货件?

+1

什么数据库引擎? – 2011-12-15 07:48:03

+0

感谢您的所有信息Damien_The_Unbeliever为我解决了问题! – dare2k 2011-12-15 07:58:22

假设你有一个支持排序功能的数据库引擎工作时,使用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 

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 
+0

这将不会选择属于最新装运日期的货件标识。 – 2011-12-15 07:47:09

没有测试,但是,这个总体思路应该工作:

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

你可以使用秩()也在CTE

;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