Mysql SQL查询中的ORDERBY子句
我有一个SQL查询,以:Mysql SQL查询中的ORDERBY子句,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我有一个SQL查询,以: ... ORDER BY event_date ASC 所以我得到了这些结果: |-------------------------------------| | location_id | event_date | event_id | |-------------------------------------| | 112 | 2014-06-01 | 501 | |-----------------------------------
...
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 |
|-------------------------------------|
我想知道是否可以使用不同的orderby
子句来获得以下结果:
|-------------------------------------|
| 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 |
|-------------------------------------|
编辑: 换句话说,我需要最早的
事件\u日期
(带有位置\u id
=X),然后是位置\u id
=X的所有其他行,按事件\u日期
排序然后是下一个最早的
事件\u日期
(带有位置\u id
!=X=Y),然后是所有带有位置\u id
=Y的行,按事件\u日期
排序依此类推……您应该使用此ORDER BY子句来获得所需的结果:
ORDER BY location_id DESC, event_date ASC
您可以连接到一个派生表,该表计算每个位置的第一个事件日期,并将其用于排序
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
@MartinSmith,你是在问你在说什么?那么你想按每个地点的最短活动日期订购吗?什么RDBMS?@MartinSmith:是的,这就是我需要的。我使用的是MySQL。你说想要的结果不是按事件日期排序的。@Selman22,这个问题根本不一样!请参阅下面的编辑和MartinSmith答案…我也这么认为,但期望结果中的顺序并不是基于仔细阅读时的位置id本身。正如@MartinSmith所意识到的,这不是我需要的。请参阅编辑以获得更好的解释…谢谢Martin!似乎你是唯一一个真正理解这个问题的人:)我会尝试一下并发表评论……我想我们都是在没有真正阅读文本的情况下根据示例结果得出结论的!再次感谢你,伙计!它的工作就像一个魅力!你在不知道表的名称和结构的情况下推断出了一切!