我有一个表delivery_history,它由一个触发器填充:
id(guid) order_number delivery_number haulier timestamp(getdate())
1 1234 haulier1 2009-10-08 8:34:00
2 1235 haulier1 2009-10-09 9:15:00
1 1234 haulier2 2009-10-10 9:20:00
我想返回所有列,但我只想查看具有最新时间戳的唯一delivery_number,因此我想要返回的数据将是:
1 1234 haulier2 2009-10-10 9:20:00
2 1235 haulier1 2009-10-09 9:15:00
到目前为止,我已经尝试了在这个网站上发布的每一种可能性和反应组合,他们要么没有给我我需要的结果,他们希望我是明智的并使用增量id而不是guid我使用过(现在有几周来自触发器的数据,我真的不想转储它),或者他们期望Sql Server 2005或更高版本。
这将在Sql Server 2000上运行。
提前致谢, 标记
答案 0 :(得分:2)
我不喜欢这里重复的可能性。具有相同delivery_number的两行可以具有相同的时间戳。考虑到交付的频率和应用程序的行为,这可能不太可能,但我不想依赖于它的正确性。
此版本使用TOP 1并允许任意数量的打破连接器:
select * from delivery_history a
where id = (
select top 1 id
from delivery_history b
where a.delivery_number = b.delivery_number
order by b.timestamp desc [, tie breaking col1, col2, ... colN]
)
答案 1 :(得分:1)
SELECT order_number, delivery_number, haulier, timestamp
FROM delivery_history dh1
WHERE timestamp = (SELECT max(dh2.timestamp)
FROM delivery_history dh2
WHERE dh2.delivery_number = dh1.delivery_number)