mysql - 按一个字段的时间顺序对行进行排序,然后按另一字段的时间顺序对行进行排序

标签 mysql sql sql-order-by

如果我们有一个在用户登录时记录的表,

---------------------------------
| user    |  time               |
---------------------------------
| Jill    | 2014-09-13 21:04:36 |
| Jack    | 2014-09-13 21:06:43 |
| Jack    | 2014-09-13 21:09:13 |
| Jack    | 2014-09-13 21:12:23 |
| Jill    | 2014-09-13 21:13:41 |
---------------------------------

我们希望按用户首先登录的行进行排序,然后按时间排序该用户随后的每次登录,

---------------------------------
| user    |  time               |
---------------------------------
| Jill    | 2014-09-13 21:04:36 |
| Jill    | 2014-09-13 21:13:41 |
| Jack    | 2014-09-13 21:06:43 |
| Jack    | 2014-09-13 21:09:13 |
| Jack    | 2014-09-13 21:12:23 |
---------------------------------

我们如何编写 ORDER BY 子句来做到这一点?

如果我们使用ORDER BY name, time,那么我们会根据名称的字母顺序在Jill之前得到Jack

---------------------------------
| user    |  time               |
---------------------------------
| Jack    | 2014-09-13 21:06:43 |
| Jack    | 2014-09-13 21:09:13 |
| Jack    | 2014-09-13 21:12:23 |
| Jill    | 2014-09-13 21:04:36 |
| Jill    | 2014-09-13 21:13:41 |
---------------------------------

如果我们使用ORDER BY time, name,那么我们只需按照他们登录的顺序混合名称即可。

---------------------------------
| user    |  time               |
---------------------------------
| Jill    | 2014-09-13 21:04:36 |
| Jack    | 2014-09-13 21:06:43 |
| Jack    | 2014-09-13 21:09:13 |
| Jack    | 2014-09-13 21:12:23 |
| Jill    | 2014-09-13 21:13:41 |
---------------------------------

我们可以使用SELECT DISTINCT name FROM table来仅按时间顺序获取名称,然后以某种方式获取其余行......但是如何在一个查询中做到这一点?有没有办法在 ORDER BY 子句中执行子查询? ORDER BY (SELECT DISTINCT name FROM table) 不起作用。

我觉得这应该很简单,但我无法弄清楚。有什么建议吗?

最佳答案

您可以加入一个子查询,该子查询获取用户的最短登录时间,然后按该时间进行排序。如果两个用户首次登录时间相同,则需要按a.user排序,以免结果混淆。

SELECT a.* 
FROM table1 a
JOIN ( SELECT user, MIN(time) min_time FROM table1 GROUP BY user) b
  ON a.user=b.user
ORDER BY b.min_time, a.user, a.time

An SQLfiddle to test with .

关于mysql - 按一个字段的时间顺序对行进行排序,然后按另一字段的时间顺序对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25831358/

相关文章:

mysql - "Wrap around"到达最后一个值后到第一个值

php - 我的获取数组不工作

sql从 View 和表中选择

mysql - Group_concat 内部排序

php - 根据来自多列的 LIKE 匹配项数量对 SQL 结果进行排序

mysql - MySQL 中非法混合排序规则 =

php - 存储用作散列密码一部分的散列函数是不好的做法吗?

mysql - 如何在 MySQL 表上添加自定义 CHECK 约束?

mysql - 子查询连接失败

java - JPA @OrderBy 注解 - 排序字符串