有一个 scores_score
表,其中包含以下列:
id, player_name, value, created_at
我必须获取 N (100) 个最佳分数,其中:
- player_name 在所有结果中必须是唯一的
- 只应返回给定 player_name 的最佳分数
- 结果必须按日期范围过滤
假设我有以下数据:
id player_name value date
1 A 400 2016-09-10
2 B 200 2016-09-12
3 C 400 2016-09-15
4 C 500 2016-09-14
5 B 100 2016-09-20
6 A 6000 2015-01-01
7 B 1200 2016-09-29
并希望获得得分在 2016-09-01 和 2016-09-20 之间的最佳球员。我应该得到:
id player_name value date
4 C 500 2016-09-14
1 A 400 2016-09-10
2 B 200 2016-09-12
这是我解决它的方法,但嵌套 SELECT 中存在一个问题,因为它获取了不在日期范围内的玩家总体最佳得分。
SELECT b.*, a.*
FROM (SELECT player_name, max(value) AS max_value
FROM scores_score
GROUP BY player_name
ORDER BY max(value) DESC) a
INNER JOIN scores_score b ON a.player_name = b.player_name AND a.max_value = b.value
WHERE CAST(b.created_at AS DATE) >= %(date_border)s
ORDER BY b.value DESC
LIMIT 100
最佳答案
select *
from (
select distinct on (player_name) *
from scores_score
where date between '2016-09-01' and '2016-09-20'
order by player_name, value desc
) s
order by value desc
limit 100
关于sql - 在给定日期之间获取最高分条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39355420/