2014-02-10 62 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'来排序更糟的是更糟。后者明确记录为可用,并将被弃用。前者明确记录为不起作用。 –

相关问题