我有一个以以下结尾的 SQL 查询:
...
ORDER BY event_date ASC
这样我就能得到这些结果:
|-------------------------------------|
| location_id | event_date | event_id |
|-------------------------------------|
| 112 | 2014-06-01 | 501 |
|-------------------------------------|
| 19 | 2014-06-04 | 508 |
|-------------------------------------|
| 112 | 2014-06-17 | 667 |
|-------------------------------------|
| 19 | 2014-07-07 | 434 |
|-------------------------------------|
我想知道是否可以使用不同的 ORDER BY
子句来获得以下结果:
|-------------------------------------|
| location_id | event_date | event_id |
|-------------------------------------|
| 112 | 2014-06-01 | 501 |
|-------------------------------------|
| 112 | 2014-06-17 | 667 |
|-------------------------------------|
| 19 | 2014-06-04 | 508 |
|-------------------------------------|
| 19 | 2014-07-07 | 434 |
|-------------------------------------|
<小时/>
编辑:
换句话说,我想要最早的 event_date
(location_id
= X),然后是 location_id
= X 的所有其他行,按 event_date
排序。
然后是下一个最早的 event_date
(location_id
!= X = Y),以及 location_id
= Y 的所有行,按 排序>事件日期
。
等等...
最佳答案
您可以连接到计算每个位置的第一个 event_date 的派生表,并将其用于订购。
SELECT E1.*
FROM Events E1
JOIN (SELECT location_id,
MIN(event_date) AS min_date
FROM Events
GROUP BY location_id) AS E2
ON E1.location_id = E2.location_id
ORDER BY E2.min_date,
E1.location_id, -- In case two locations have same MIN(event_date)
E1.event_date
关于mysql - SQL 查询中的 ORDER BY 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975423/