2013-11-04 29 views
1

我有如下表沒有組SQL MAX日期由

Location Type  Date 
A  TestType 10-10-2013 
A  TestType 05-05-2013 
A  BestType 06-06-2013 
B  TestType 09-09-2013 
B  TestType 01-01-2013 

我想回到最大日期爲每個位置不分類型,但我必須歸還所有3列。

期望的結果:

Location Type  Date 
A  TestType 10-10-2013 
B  TestType 09-09-2013 

什麼是做到這一點的最好方法是什麼?

我調查了使用RANK() Over Partition,但無法讓它正常工作。

+1

你爲什麼不想要使用組? – user1455836

+0

我必須返回類型列,所以分組變得尷尬 – DtotheG

+0

'我必須返回類型列'它們是哪一個? –

回答

5

使用row_number()功能partition by location ordering by [date] desc得到每個位置的max date

;with cte as (
    select location, type, [date], 
      row_number() over (partition by location order by [date] desc) rn 
    from yourTable 
) 
select location, type, [date] 
from cte 
where rn = 1 --<<-- rn = 1 gets the max date for each location. 

Fiddle demo

+0

這看起來像是在做這項工作。將重新檢查結果與數據庫中的內容並更新 – DtotheG

+0

沒問題,它應該工作,但肯定需要你的時間。 – Kaf

+1

很好,非常感謝 – DtotheG

2

你可以這樣做:

SELECT location, MAX(date) 
FROM yourTable 
GROUP BY location; 

編輯:

如果你想用它類型,你可以這樣做:

select y.location, y.Type, y.date 
from YourTable y 
inner join(
    select location, max(date) maxdate 
    from YourTable 
    group by location 
) ss on y.location = ss.location and y.date = ss.maxdate 

sqlfiddle demo

+0

查看更新的問題:「我必須返回所有3列」 –

+0

我更新了我的答案,但這不是完全防範的。如果您在同一地點有相同的日期,則會返回兩次。你可以在這種情況下使用DISTINCT,但如果他們有不同的類型,它仍然會返回兩個。它看起來像@卡夫的版本處理這個比我的答案更好。 –