2009-04-30 75 views
2

我需要爲一張表獲得一組不同的記錄以及所有duplciates中的最大日期。從SQL Server表中選擇具有最大日期的不同行?

例如:

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

原來是導致問題的另一個問題。結果不是我所期望的。抱歉。 – schooner 2009-04-30 13:29:03

+0

請關閉您的問題,因爲不相關。謝謝 – JoshBerke 2009-04-30 13:31:15

+1

是什麼修復?它很好,你找到解決方案,一些更多的人也需要它 – ant 2011-05-11 22:54:27

回答

4

您的查詢或您的示例結果出現問題,因爲您所描述的內容不應該是可能的。如何處理一些實際的SQL和實際結果?

無論如何,您並不需要distinct,因爲您所選的所有內容都是您的三個分組列,因此您將按照定義最終列出所有不同的行。我從來沒有嘗試過這種方式,所以在使用這兩種方法時可能會有一些不當行爲。你有沒有嘗試刪除distinct?是什麼讓你把它放在那裏?

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)(按此順序)將大大改善此查詢。

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

您的查詢也可以正常工作,所以出現錯誤,或者您沒有正確傳達您的代碼的確切性質。

相關問題