我需要获取表的一组不同记录以及所有重复项的最大日期。
例如:
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
我认为问题在于团队和不同部门相处得不好。
编辑:找到导致问题的问题,查询结果符合预期,而不是上面那样。
您的查询或示例结果有问题,因为您所描述的内容是不可能的。一些实际的 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)
(按此顺序)上建立索引将极大地改善此查询。
如果您运行此查询:
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
您的查询也将有效,因此确实出了问题,或者您没有正确传达代码的确切性质。
选择不同的 a,b,c, Max(OrderDate) 作为 maxDate 来自美国广播公司 按 a、b、c 分组
解决方案:从上述查询中删除 DISTINCT 是解决方案并返回预期结果。