2014-02-10 61 views
0

任何人都知道我怎麼可以得到相當於每game_id最大比分的日期,每級請:SQL:與相應的日期以及選擇列最大值

---------------------------------------- 
|id |game_id |level |score |date  | 
---------------------------------------- 
|1 |0  |1  |90 |1391989720 | 
|1 |0  |1  |95 |1391989721 | 
|1 |1  |1  |4  |1391989722 | 
|1 |1  |1  |8  |1391989723 | 
|1 |1  |2  |6  |1391989724 | 
---------------------------------------- 

感謝鄉親,應該檢查相關注釋。此查詢工作:

SELECT cdu_user_progress.game_id, 
      cdu_user_progress.level, 
      max_score, 
      cdu_user_progress.date 
    FROM 
    (
     SELECT game_id, level, MAX(score) AS max_score 
     FROM cdu_user_progress 
     GROUP BY game_id, level 
    ) AS ms 
    JOIN cdu_user_progress ON cdu_user_progress.game_id = ms.game_id AND 
           cdu_user_progress.level = ms.level AND 
           cdu_user_progress.score = ms.max_score 

現在,如果我還想要得到的分數(每級)第一game_id和它的日期,拿到這個輸出:

----------------------------------------------------------------- 
|game_id |level |max_score |max_date |first_score |first_date | 
----------------------------------------------------------------- 
|0  |1  |95  |1391989721 |90   |1391989720 | 
|1  |1  |8   |1391989723 |4   |1391989722 | 
|1  |2  |6   |1391989724 |6   |1391989724 | 
----------------------------------------------------------------- 

謝謝!

+1

幸運的是,這個問題是每一個問題。單。天。在SO。有時候也可以正確回答! – Strawberry

+1

您到目前爲止詢問了15個問題。當你寫下你的問題時,有沒有注意到「相關」列出現?副本也從您的問題右側的「相關」列中挑選出來。 – fancyPants

回答

0

因爲它是MySQL,你可以簡單地這樣對拉動全行平均每場得分最高:

select * from (
    select * 
    from cdu_user_progress 
    order by score desc) x 
group by game_id 

這由功能工作,因爲MySQL的非標組,由此返回第一每個組遇到的行不是全部非聚合列是在group by子句中命名的。

+1

這絕對不能保證工作。 MySQL文檔非常明確,當使用允許select中非聚合列的group-by擴展時,值來自* arbitrary *(「indeterminate」)行,不一定來自第一行。文檔在這裏:http://dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html。 –

+0

@GordonLinoff聽到這一切之前......打哈欠。向我展示一個測試用例,它返回除第一行以外的任何內容。你不能,因爲它**從未**發生。這項技術可以100%或時間工作。它將改變的唯一方法是如果有一個主要的更新到mysql,他們決定改變這個功能的實現,這是不太可能的。除此之外,相信我......你可以依靠這種行爲。 – Bohemian

+1

。 。如果文檔沒有明確指出這一點,那麼我只是 - 有點痛苦 - 忽略這個問題(我敢肯定,ANSI標準指出'order by'在子查詢中被忽略,除非在某些情況下具體情況)。所以雖然這在實踐中有效,但我認爲這是非常不好的做法。例如,比使用'group by'來排序更糟的是更糟。後者明確記錄爲可用,並將被棄用。前者明確記錄爲不起作用。 –

相關問題