从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
我无法找到一个解决方案是排他性的。 如何获取每件商品的最新货件?
答
假设你有一个支持排序功能的数据库引擎工作时,使用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
什么数据库引擎? – 2011-12-15 07:48:03
感谢您的所有信息Damien_The_Unbeliever为我解决了问题! – dare2k 2011-12-15 07:58:22