【发布时间】:2018-03-31 16:54:43
【问题描述】:
我有这样的桌子:
+-------------+---------------------+---------------------+--------+
| id | name | start_time | end_time | score |
+-------------+---------------------+---------------------+--------+
| 1 | Jon | 2017-10-19 01:00:00 | 2017-10-19 01:20:00 | 20 |
| 2 | Jane | 2017-10-19 01:15:00 | 2017-10-19 01:30:00 | 20 |
| 3 | Fred | 2017-10-19 01:00:25 | 2017-10-19 03:10:35 | 80 |
| 4 | July | 2017-10-19 01:12:28 | 2017-10-19 01:16:35 | 10 |
+-------------+---------------------+---------------------+--------+
我想要这个:
+-------------+---------------------+---------------------+--------+-------+
| id | name | start_time | end_time | score | rank |
+-------------+---------------------+---------------------+--------+-------+
| 3 | Fred | 2017-10-19 01:00:25 | 2017-10-19 03:10:35 | 80 | 1 |
| 2 | Jane | 2017-10-19 01:15:00 | 2017-10-19 01:30:00 | 20 | 2 |
| 1 | Jon | 2017-10-19 01:00:00 | 2017-10-19 01:20:00 | 20 | 3 |
| 4 | July | 2017-10-19 01:12:28 | 2017-10-19 01:16:35 | 10 | 4 |
+-------------+---------------------+---------------------+--------+-------+
基本上,我想要按分数排序。如果分数相等,则按最低持续时间时间排序。 这与仅按 score 排序不同,它还应该从 start_time 和 end_timer 计算持续时间
【问题讨论】:
-
ID 不应该改变。但这只是
SELECT * FROM TBL order by score desc, end_time asc这是什么 rdbms 和版本?如果你想要一个“排名”列,如果它是 mySQL 与 SQL-Server,实现会有所不同。 -
我固定了 id ,你不能只说 end_time asc ,因为你可以看到“JANE”有更高的 end_time 但结果是 15 分钟,“JON”时间是 20 分钟
-
MYSQL 5.6 版
-
继续。尝试一下。
-
所以你想按持续时间而不是时间减去两者?