SQL:获取最近的最大条目

Posted

技术标签:

【中文标题】SQL:获取最近的最大条目【英文标题】:SQL: Get most recent maximum entry 【发布时间】:2014-03-14 02:13:56 【问题描述】:

任何人都知道如何从该表中获得最近的最高分:

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

到目前为止,我有这个:

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

但这只会让我获得 FIRST 最高分(日期 1391989721)...

【问题讨论】:

你想得到什么结果?最近的最大值 = ? 最近的最大值是日期 1391989722(分数 = 95) 你想要每个游戏和关卡吗?还是表格中只有一行结果? 是的,根据游戏和级别... 您的问题不清楚 id 代表什么以及应该如何处理。 【参考方案1】:

有一个更简单的解决方案,使用order by 来获得最好的最新分数:

select game_id, level, score, date 
from cdu_user_progress
where id = 1
order by score desc, date desc
limit 1

要获得所有最好的分数和他们的最新时间,您需要加入。

select a.game_id, a.level, a.score, max(p.date) 
from (select game_id, level, max(score) as score
from cdu_user_progress
group by game_id, level) as a
inner join cdu_user_progress p
on a.game_id = p.game_id, a.level = p.level, a.score = p.score
group by a.game_id, a.level, a.score

实际上,由于您的问题不够清楚,我不确定这是否是您要查找的内容。

【讨论】:

但这不是按游戏和级别分组的吗? 你没有在你的问题中提到这一点。 Lorenz,我给你了,但我认为你的编辑真的没问题(至少,根据目前提供的信息)。以某种方式再次编辑它,我会给你投票!

以上是关于SQL:获取最近的最大条目的主要内容,如果未能解决你的问题,请参考以下文章

用于获取 ID1 的最新条目的 SQL 查询

如何检索表的值以获取sql中两列的最大值

mysql获取具有最大聚合计数的条目

从最近插入的数据库条目的特定行获取信息

获取随机条目的 SQL 查询

在单个 SQL 查询中获取两个下一个和两个上一个条目