简体   繁体   English

按同一列排序两次

[英]Order by the same column twice

I have the following query:我有以下查询:

SELECT el.event_title
      ,se.event_eventDateAndTime
FROM events__events_list el
JOIN events__sub_events se ON el.UID = se.event_masterEvent
WHERE (se.event_eventDateAndTime BETWEEN CURDATE() AND (CURDATE() + INTERVAL 45 DAY))
ORDER BY se.event_eventDateAndTime ASC;

This produces a list of events ordered by the date:这将生成按日期排序的事件列表:

event_title事件标题 event_eventDateAndTime事件_事件日期和时间
Event 2活动二 2023-02-22 19:30:00 2023-02-22 19:30:00
Event 1活动一 2023-02-23 19:30:00 2023-02-23 19:30:00
Event 2活动二 2023-02-24 19:30:00 2023-02-24 19:30:00
Event 3活动三 2023-02-25 19:30:00 2023-02-25 19:30:00
Event 2活动二 2023-02-26 19:30:00 2023-02-26 19:30:00
Event 1活动一 2023-02-27 19:30:00 2023-02-27 19:30:00

If I order by event title and event date I get the following:如果我按活动标题和活动日期排序,我会得到以下信息:

event_title事件标题 event_eventDateAndTime事件_事件日期和时间
Event 1活动一 2023-02-23 19:30:00 2023-02-23 19:30:00
Event 1活动一 2023-02-27 19:30:00 2023-02-27 19:30:00
Event 2活动二 2023-02-22 19:30:00 2023-02-22 19:30:00
Event 2活动二 2023-02-24 19:30:00 2023-02-24 19:30:00
Event 2活动二 2023-02-26 19:30:00 2023-02-26 19:30:00
Event 3活动三 2023-02-25 19:30:00 2023-02-25 19:30:00

But I want to order by the event title and the date, so the events are kept together and then ordered by the date of the first instance... like this:但我想按事件标题和日期排序,所以事件会放在一起,然后按一审日期排序......像这样:

event_title事件标题 event_eventDateAndTime事件_事件日期和时间
Event 2活动二 2023-02-22 19:30:00 2023-02-22 19:30:00
Event 2活动二 2023-02-24 19:30:00 2023-02-24 19:30:00
Event 2活动二 2023-02-26 19:30:00 2023-02-26 19:30:00
Event 1活动一 2023-02-23 19:30:00 2023-02-23 19:30:00
Event 1活动一 2023-02-27 19:30:00 2023-02-27 19:30:00
Event 3活动三 2023-02-25 19:30:00 2023-02-25 19:30:00

I'm lost and I'm not sure how best to move forward.我迷路了,我不确定如何才能最好地前进。 I've tried searching but I can't find anything that matches my problem.我试过搜索,但找不到与我的问题相符的任何内容。

You can use the MIN window function that selects the minimum " event_eventDateAndTime " for each " event_title " for you, in the ORDER BY clause.您可以在ORDER BY子句中使用MIN window function 为每个“ event_title ”选择最小的“ event_eventDateAndTime ”。

SELECT el.event_title
      ,se.event_eventDateAndTime
FROM       events__events_list el
INNER JOIN events__sub_events se ON el.UID = se.event_masterEvent
WHERE se.event_eventDateAndTime BETWEEN CURDATE() AND (CURDATE() + INTERVAL 45 DAY)
ORDER BY MIN(event_eventDateAndTime) OVER(PARTITION BY event_title),
         event_title,
         event_eventDateAndTime

Output: Output:

event_title事件标题 event_eventDateAndTime事件_事件日期和时间
Event 2活动二 2023-02-22 19:30:00 2023-02-22 19:30:00
Event 2活动二 2023-02-24 19:30:00 2023-02-24 19:30:00
Event 2活动二 2023-02-26 19:30:00 2023-02-26 19:30:00
Event 1活动一 2023-02-23 19:30:00 2023-02-23 19:30:00
Event 1活动一 2023-02-27 19:30:00 2023-02-27 19:30:00
Event 3活动三 2023-02-25 19:30:00 2023-02-25 19:30:00

Check the demo here .此处查看演示。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM