我需要为表格获取一组不同的记录以及所有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并且明显不能相处得很好。
编辑:发现导致问题的问题,查询结果与预期一致,而不是如上所述。
答案 0 :(得分:4)
您的查询或示例结果出现问题,因为您所描述的内容不应该是可能的。一些实际的SQL和实际结果怎么样?
无论如何,你不需要distinct
,因为你所选择的只是你的三个分组列和一个聚合,所以你将按照定义结束所有不同的行。我从来没有试过这个,所以也许在使用这两者时会有一些不当行为。您是否尝试删除distinct
?是什么原因让你把它放在那里?
答案 1 :(得分: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)
上建立索引(按此顺序)将大大改善此查询。
答案 2 :(得分: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
您的查询也会正常运行,因此出现问题或者您没有正确传达代码的确切性质。