繁体   English   中英

从SQL Server表中选择具有最大日期的不同行?

[英]Select distinct row with max date from SQL Server table?

我需要为表格获取一组不同的记录以及所有duplciates的最大日期。

例如:

Select distinct a,b,c, Max(OrderDate) as maxDate
From ABC
Group By a,b,c

问题是我得到了每个不同日期的记录。

例如:

aaa, bbb, ccc, Jan 1 2009
aaa, bbb, ccc, Jan 28 2009

我怎么能限制这个,所以我最终只能:

aaa, bbb, ccc Jan 28 2009

我认为问题是gorup并且明显不能相处得很好。

编辑:发现导致问题的问题,查询结果如预期,而不是如上所述。

您的查询或示例结果都有问题,因为您所描述的内容不应该是可能的。 一些实际的SQL和实际结果怎么样?

在任何情况下,您不需要在那里进行distinct ,因为您选择的是您的三个分组列和一个聚合,因此您将根据定义最终得到所有不同的行。 我从来没有试过这个,所以也许在使用这两者时会有一些不当行为。 你有没有尝试删除distinct 是什么原因让你把它放在那里?

WITH q AS (
        SELECT  abc.*, ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY orderDate DESC) AS rn
        FROM    abc
        )
SELECT  *
FROM    q
WHERE   rn = 1

(a, b, c, orderDate)上建立索引(a, b, c, orderDate)按此顺序)将大大改善此查询。

如果您运行此查询:

select 'ab' as Col1, 'bc' as col2, 'cd' as col3, getdate() as Date
into #temp
insert into #temp
values ('ab','bc','cd','1/15/09')
insert into #temp
values ('aa','bb','cc','1/1/09')
insert into #temp
values ('aa','bb','cc','1/22/09')

select col1,col2,col3,max(date)
from #temp
group by col1,col2,col3

你应该回来:

aa,bb,cc,2009-01-22 00:00:00.000
ab,bc,cd,2009-04-30 09:23:07.090

您的查询也会正常工作,因此确实存在问题,或者您没有正确地传达代码的确切性质。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM