sql - 在给定日期之间获取最高分条目

标签 sql postgresql

有一个 scores_score 表,其中包含以下列:

id, player_name, value, created_at

我必须获取 N (100) 个最佳分数,其中:

  1. player_name 在所有结果中必须是唯一的
  2. 只应返回给定 player_name 的最佳分数
  3. 结果必须按日期范围过滤

假设我有以下数据:

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

最佳答案

distinct on

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/

相关文章:

postgresql - 自动完成字段的类似 UTF-8 字符串

类型中的 Postgresql 正则表达式而不是检查约束

sql - 使用 LIKE 子句正确格式化 sql 查询

python - Django/Python : Update the relation to point at settings. AUTH_USER_MODEL

javascript - 如何将 json 结果导入 PHP

mysql - 根据当前时间创建 View (MySql)

sql - 查看服务器上运行的所有 SQL 查询的列表

PHP - 实现主键 SQL

SQL:在 Chartio 中将列动态转置为行

sql - 在 SQL Server 和 Postgresql 中将 CASE 用于类似枢轴的函数