Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询中的ORDERBY子句_Mysql_Sql_Sql Order By - Fatal编程技术网

Mysql SQL查询中的ORDERBY子句

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 | |-----------------------------------

我有一个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   |
|-------------------------------------|
我想知道是否可以使用不同的
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!似乎你是唯一一个真正理解这个问题的人:)我会尝试一下并发表评论……我想我们都是在没有真正阅读文本的情况下根据示例结果得出结论的!再次感谢你,伙计!它的工作就像一个魅力!你在不知道表的名称和结构的情况下推断出了一切!