带有最新时间戳和多个(或所有)列的不同项目

时间:2009-10-22 11:27:56

标签: sql-server tsql distinct

我有一个表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上运行。

提前致谢, 标记

2 个答案:

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