2010-09-17 61 views
2

當前我正在兩個表上執行左連接。第一個表有一個ID和一個人名,第二個表有一個ID,表1中一個人的ID,然後是他們最後一次飛行的時間戳。每個左連接返回1個結果

People        Flights 
id | name    id | person_id | time 
------------    --------------------------- 
1  Dave    1   1   1284762115 
2  Becky    2   1   1284787352 
          3   2   1284772629 
          4   2   1286432934 
          5   1   1289239480 

當我執行我的左連接,我得到的人民和他們的飛行時間的列表,但我想只是與他們的最後一次飛行時間的人名單。

所以選擇p.id,p.name,f.time距離人民p LEFT JOIN航班f在p.id = f.person_id

返回

1 Dave 1284762115 
1 Dave 1284787352 
1 Dave 1289239480 
2 Becky 1284772629 
2 Becky 1286432934 

我想看到的只是:

1 Dave 1289239480 
2 Becky 1286432934 

所以我需要只返回匹配最高f.id或最高f.time

回答

5
SELECT 
    p.id, p.name, MAX(f.time) AS LastFlight 
FROM 
    People p 
    LEFT JOIN Flights f ON p.id = f.person_id 
GROUP BY 
    p.id, p.name 
+0

這是真棒,謝謝。簡單而優雅。 – 2010-09-17 22:45:42

2
SELECT p.id, p.name, f.time FROM People p LEFT JOIN 
    (select person_id, max(time) time from flights group by person_id) f 
ON p.id = f.person_id 
+1

'最大(時間)'需要列別名我認爲? – 2010-09-17 21:42:35

+0

是的,我不小心把它丟掉了;固定。 – 2010-09-17 22:02:15

+0

這個答案對接受的答案有幫助,因爲我的包裝select語句已經有很多列,我不想在group by語句中指定。 – alexkb 2015-08-19 05:44:06

1

試試這個:

;with LastFlightTimes as 
(
select person_id, max(id) maxid 
from Flights f 
group by person_id 
) 
SELECT p.id, p.name, f.time FROM People p 
LEFT JOIN LastFlightTimes lft ON p.id = lft.person_id 
left join Flights f on f.id = lft.maxid