mysql 按同一列排序两次

jfgube3f  于 2023-02-03  发布在  Mysql
关注(0)|答案(1)|浏览(147)

我有以下疑问:

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;

这将生成按日期排序的事件列表:
| 事件_标题|事件事件日期和时间|
| - ------|- ------|
| 事件2|2023年2月22日19时30分|
| 事件1|2023年2月23日19时30分|
| 事件2|2023年2月24日19时30分|
| 事件3|2023年2月25日19时30分|
| 事件2|2023年2月26日19时30分|
| 事件1|2023年2月27日19时30分|
如果按事件标题和事件日期排序,则会得到以下内容:
| 事件_标题|事件事件日期和时间|
| - ------|- ------|
| 事件1|2023年2月23日19时30分|
| 事件1|2023年2月27日19时30分|
| 事件2|2023年2月22日19时30分|
| 事件2|2023年2月24日19时30分|
| 事件2|2023年2月26日19时30分|
| 事件3|2023年2月25日19时30分|
但我想按事件标题和日期排序,所以事件被放在一起,然后按第一个示例的日期排序...像这样:
| 事件_标题|事件事件日期和时间|
| - ------|- ------|
| 事件2|2023年2月22日19时30分|
| 事件2|2023年2月24日19时30分|
| 事件2|2023年2月26日19时30分|
| 事件1|2023年2月23日19时30分|
| 事件1|2023年2月27日19时30分|
| 事件3|2023年2月25日19时30分|
我迷路了,不知道如何才能最好地继续前进。我已尝试搜索,但找不到任何与我的问题匹配的内容。

oaxa6hgo

oaxa6hgo1#

您可以使用ORDER BY窗口函数,在ORDER BY子句中为每个"* 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

输出:
| 事件_标题|事件事件日期和时间|
| - ------|- ------|
| 事件2|2023年2月22日19时30分|
| 事件2|2023年2月24日19时30分|
| 事件2|2023年2月26日19时30分|
| 事件1|2023年2月23日19时30分|
| 事件1|2023年2月27日19时30分|
| 事件3|2023年2月25日19时30分|
检查here演示。

相关问题