SQL:从列中选择最大值及其对应的日期

时间:2014-02-10 14:17:32

标签: mysql sql mysqli groupwise-maximum

任何人都知道如何获得与每个游戏的最高得分相对应的日期_每个级别请:

----------------------------------------
|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 个答案:

答案 0 :(得分:0)

因为它是mysql,所以你可以简单地用这个来获得每场比赛得分最高的整行:

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

这是因为mysql非标准按功能分组,因此当不 all 非聚合列命名时,它返回每个组遇到的第一个行group by子句。