mysql - 对按日期分组的所有条目“循环”相同的 SQL 查询
问题描述
我有一张这样的桌子:
+------------+-----------+------+----+
| date | player_id | rank | hp |
+------------+-----------+------+----+
| 2021-01-01 | 1 | 1 | 39 |
| 2021-01-01 | 5 | 2 | 20 |
| 2021-01-01 | 2 | 3 | 12 |
| 2021-01-01 | 3 | 4 | 48 |
| 2021-01-01 | 4 | 5 | 25 |
| 2021-01-02 | 1 | 2 | 42 |
| 2021-01-02 | 2 | 1 | 38 |
| 2021-01-02 | 3 | 4 | 21 |
| 2021-01-02 | 4 | 3 | 35 |
| 2021-01-02 | 5 | 5 | 28 |
| 2021-01-03 | 1 | 5 | 38 |
| 2021-01-03 | 3 | 2 | 31 |
| 2021-01-03 | 2 | 3 | 26 |
| 2021-01-03 | 4 | 4 | 22 |
| 2021-01-03 | 5 | 1 | 19 |
+------------+-----------+------+----+
当我使用以下 SQL 代码时:
SELECT * FROM
(SELECT * FROM `players` WHERE date='2021-01-01' ORDER BY rank ASC LIMIT 3) highest_rank
ORDER BY hp DESC LIMIT 2
结果将是这样的:
+------------+-----------+------+----+
| date | player_id | rank | hp |
+------------+-----------+------+----+
| 2021-01-01 | 1 | 1 | 39 |
| 2021-01-01 | 5 | 2 | 20 |
+------------+-----------+------+----+
我的问题是结果仅适用于 date='2021-01-01'。我想在数据库中每天都这样做。最终,我希望结果如下所示:
+------------+-----------+------+----+
| date | player_id | rank | hp |
+------------+-----------+------+----+
| 2021-01-01 | 1 | 1 | 39 |
| 2021-01-01 | 5 | 2 | 20 |
| 2021-01-02 | 1 | 2 | 42 |
| 2021-01-02 | 2 | 1 | 38 |
| 2021-01-03 | 3 | 2 | 31 |
| 2021-01-03 | 2 | 3 | 26 |
+------------+-----------+------+----+
如何才能做到这一点?如果这有什么不同,我正在使用 MySQL/MariaDB。
解决方案
问题解决了。信用在评论部分提供了一个几乎有效的解决方案。他撤回了这个建议,因为我认为这不是最终的解决方案。但我对它进行了修补并让它工作。谢谢,粘点!
对于任何对解决方案感兴趣的人:
SELECT date, player_id, rank, hp
FROM
(
SELECT *,
row_number() OVER (PARTITION BY date
ORDER BY hp DESC) h
FROM
(
SELECT *,
row_number() OVER (PARTITION BY date
ORDER BY rank ASC) r
FROM players
) x
WHERE r<=3
) y
WHERE h<=2
推荐阅读
- ajax - Symfony 5 / 请求响应:使用 Ajax 获取数据
- python - 使用循环从文件中读取和提取有用数据无法生成值列表
- java - 是否有可能检查我进入的对象是否存在但指向 Null?
- ios - swift-lint:出现不在 .swiftlint.yml 文件中的错误
- android - 从 Flutter 代码构建 APK 时“无法初始化类 org.codehaus.groovy.runtime.InvokerHelper”
- php - 如何从两个字符串中创建一个字符串,其中包含 php 中的常用词和不常用词?
- python - 无法在 django 中显示特定页面的用户特定链接
- javascript - 在ajax请求中读取编码数据
- javascript - Is there a way to display on the doc that there are functions get called inside another in JSDoc?
- ios - How to add "inner padding" into custom view so that its size will become smaller visually yet able retain its touchable area?