0
我有三個關注的表和一個查詢,它們從它們生成以下輸出,其中每個字段前面都有一個字母,代表用於演示目的的原始表。我想要的只是一個只包含最新數據的報告,即我只想用MAX(EntryDate)返回的行,但我無法弄清楚如何完成此操作。我試過了,HAVING
,聚合等,但沒有成功。無論我的方法是錯誤的,還是我在語法上缺失了某些東西。分別按最大日期分組選擇記錄
s.ID r.FirstID m.ID m.PartNum m.Revision r.EntryDate
26 42 13 NULL A 2012-03-25 15:32:00
26 42 17 820044444 B 2012-03-27 09:48:00
26 42 14 820056789 C 2012-03-28 12:19:00
所需的結果:
s.ID r.FirstID m.ID m.PartNum m.Revision r.EntryDate
26 42 14 820056789 C 2012-03-28 12:19:00
對於一些額外的背景下,r.FirstID代表所有彼此相關記錄的分組,所以爲每個分組我只希望在返回記錄最新的數據。
這裏是我的查詢,我至今:
select s.ID,r.FirstID,m.ID,m.PartNum,m.Revision,r.EntryDate from StatusLog s
left join (select FirstID,PartInfoID from Request where PartInfoID is not null group by FirstID,PartInfoID) r on s.FirstID= r.FirstID
--required filtering here? Or move this extra join to the inner query?
left join PartInfo m on r.PartInfoID = m.ID
我使用的是SQL Server以我的DBMS。
沒有先生,這隻適用於特定情況。請重新閱讀我的問題。我強調了關鍵點。我需要它返回一個結果集,**由r.FirstID'字段確定的每個組**的一行**。 – Chiramisu 2012-03-28 20:27:51
@Chiramisu好的,修復:)我只需要從ROW_NUMBER()GROUP BY中刪除s.ID。這應該現在工作。我也注意到我的ORDER BY是不正確的,所以把它改爲DESC :) – 2012-03-28 20:30:01
我不認爲你可以使用'ROW_NUMBER()OVER(GROUP BY)',我認爲你的意思是'ROW_NUMBER()OVER(PARTITION BY')對嗎? – Arion 2012-03-28 20:34:32