我的表格如下:
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,但它总是弄乱我的查询。
谢谢!
答案 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
中,我该如何添加?”