2016-02-05 21 views
0

我有一個創建子表內複合(compresults)內部聯接兩個表,並只作最新記錄顯示(MySQL的)

兩個上級表我想獲得最新的每個記錄(只有1個)運動員

我知道答案是一起選擇具有最大日比賽,只顯示它這樣的線,但是我一直在努力這樣做,但我不能讓格式正確

父表(運動員) +---------+-------+ | athlete | name | +---------+-------+ | 1 | James | | 2 | Gemma | +---------+-------+

父表(比賽) +-----+----------+----------+ | cid | compname | compdate | +-----+----------+----------+ | 1 | Comp A | 2015 | | 2 | Comp B | 2014 | +-----+----------+----------+

子表(compresults) +---------+-----+--------+ | athlete | cid | result | +---------+-----+--------+ | 1 | 1 | 500 | | 1 | 2 | 550 | | 2 | 2 | 450 | +---------+-----+--------+

預期的結果: +-------+----------+--------+ | name | compname | result | +-------+----------+--------+ | James | Comp A | 500 | | Gemma | Comp B | 450 | +-------+----------+--------+

任何想法?謝謝!

+2

MySQL或SQL Server?他們是2種不同的產品 –

+0

其mySQL,我的不好 – Jeremy

回答

0

我相信這收到你之後的結果。

SELECT a.`name`, b.`compname`, c.`result` 
FROM `compresults` c 
INNER JOIN `competitions` b ON b.cid = c.cid 
INNER JOIN `athletes` a ON c.`athlete` = a.`athlete` 
WHERE b.`compdate` = (
            SELECT co.`compdate` 
            FROM `competitions` co INNER JOIN `compresults` cr ON cr.`cid` = co.`cid` 
            WHERE cr.`athlete` = a.`athlete` 
            ORDER BY co.`compdate` DESC LIMIT 1 
        ) 
+0

優秀,非常感謝你! – Jeremy

0

嘗試使用

select b.name,c.compname,a.result from compresults a left join athletes 
b on (a.athlete)=b.athlete 
left join competitions c on (a.cid)=c.cid 
+0

謝謝@snare修復我的答案 –

+0

此查詢不提供信息OP後。如果我理解正確的話,他希望爲每個運動員提供單一的,最近的比賽記錄。這個查詢抽取多個記錄,而不是基於它們最近的時間過濾掉任何記錄。這是一個好去處,但你可能想要再來一次。 – golgothan3

+0

耶你對@golgothan,謝謝 –

相關問題