查询从表中选择非重复值

时间:2013-12-09 17:07:10

标签: sql-server unique distinct distinct-values

我的表格如下:

ID        Name             RunDate
10001     Item 1           12/09/2013 02:11:47
10002     Item 2           12/09/2013 01:13:25
10001     Item 1           12/09/2013 01:11:37
10007     Item 7           12/08/2013 11:02:04
10001     Item 1           12/08/2013 10:25:00

我的问题是,此表将被发送到通讯组电子邮件,它会使电子邮件变得如此之大,因为该表有超过数百行。我想要实现的只是显示DISTINCT ID仅显示最新RunDate的记录。

ID        Name             RunDate
10001     Item 1           12/09/2013 02:11:47
10002     Item 2           12/09/2013 01:13:25
10007     Item 7           12/08/2013 11:02:04

知道我怎么能这样做吗?我对聚合的东西不是很好,我使用了DISTINCT,但它总是弄乱我的查询。

谢谢!

2 个答案:

答案 0 :(得分:4)

按应该不同的值进行分组,并使用max()获取最新日期

select id, name, max(rundate) as rundate
from your_table
group by id, name

答案 1 :(得分:2)

这更灵活,因为它不需要按所有列进行分组:

;WITH x AS
(
  SELECT ID, Name, RunDate, /* other columns, */
    rn = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RunDate DESC)
  FROM dbo.TableName
)
SELECT ID, Name, RunDate /* , other columns */
  FROM x
  WHERE rn = 1
  ORDER BY ID;

(因为Name并不需要进行分组,实际上甚至不应该在此表中,并且GROUP BY解决方案的下一个后续问题几乎总是如此, “如果将<column x><column y>添加到输出中,如果它们具有不同的值且无法添加到GROUP BY中,我该如何添加?”