2

我需要为一个表获取一组不同的记录以及所有重复项的最大日期。

前任:

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

我认为问题是团队相处得不好。

编辑:找到导致问题的问题,查询结果符合预期,而不是如上。

4

3 回答 3

4

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

无论如何,您不需要distinct那里,因为您选择的只是三个分组列和一个聚合,因此根据定义,您最终会得到所有不同的行。我从来没有尝试过这个,所以在使用这两种方法时可能会有一些不当行为。你试过删除distinct吗?是什么让你把它放在那里?

于 2009-04-30T13:22:14.357 回答
3
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)(按此顺序)将大大改进此查询。

于 2009-04-30T13:22:33.873 回答
1

如果您运行此查询:

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

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

于 2009-04-30T13:29:45.713 回答