需要帮助来订购我的 MySQL 表中的时间和日期列

Posted

技术标签:

【中文标题】需要帮助来订购我的 MySQL 表中的时间和日期列【英文标题】:Need help to order the time and date column in my MySQL table 【发布时间】:2021-09-23 03:21:19 【问题描述】:

我想在制定我的查询方面寻求一些帮助,以便我可以实现下面所述的预期输出。我尝试了很多次来实现预期的输出,但我总是得到下面也描述的实际输出。我使用 mysql 作为我的 RDBMS。顺便说一句,如果仅使用查询无法做到这一点,请告诉我,以便我通知我的团队。谢谢

排序规则:

排序规则就是按顺序显示每个日期的每一组时间段。例如,9 月 23 日 - 26 日 [显示第一组时间段] -> 下一个显示:9 月 23 日 - 26 日 [显示第二组时间段,如果有的话] -> 等等。

预期输出:

|      Date         | Start_Time | End_Time
|September 23, 2020 | 8:00 AM    | 9:00 AM
|September 24, 2020 | 9:00 AM    | 10:00 AM 
|September 25, 2020 | 8:00 AM    | 9:00 AM 
|September 26, 2020 | 9:00 AM    | 10:30 AM 
|September 23, 2020 | 9:00 AM    | 10:00 AM 

实际输出:

https://i.stack.imgur.com/g9kWV.png

当前代码:

Select DISTINCT timeslot.Timeslot_ID,
timeslot.Date,timeslot.Start_Time,timeslot.End_Time from timeslot
WHERE timeslot.ExamEvent_ID=1 ORDER BY STR_TO_DATE
(CONCAT(timeslot.Start_Time,' - ',timeslot.End_Time), '%l:%i %p - %l:%i %p'), 
STR_TO_DATE (timeslot.Date, '%M %e, %Y')

【问题讨论】:

按日期、开始时间、结束时间排序? 显示一个您自己提出的查询示例。并且请不要将实际输出放在不同的网站上,而是在此处发布。 请描述排序规则 @Jelle 我编辑了我的问题的内容。我添加了当前的 sql 查询,就实际输出的显示而言,这是一个堆栈溢出的图像,由于它需要 10 个信誉点,因此我只添加了链接。谢谢 然后按timeslot.Start_Time、timeslot.End_Time、timeslot.Date排序 【参考方案1】:

使用ROW_NUMBER()窗口函数:

SELECT Timeslot_ID, ExamEvent_ID, Date, Start_Time, End_Time
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY Date ORDER BY STR_TO_DATE(Start_Time, '%l:%i %p')) rn
  FROM timeslot
) t  
ORDER BY rn, STR_TO_DATE(Date, '%M %e, %Y')

请参阅demo。

【讨论】:

哇!这个查询代码确实解决了这个问题。非常感谢你。我非常感谢您为解决这个问题所付出的时间和精力。

以上是关于需要帮助来订购我的 MySQL 表中的时间和日期列的主要内容,如果未能解决你的问题,请参考以下文章

同一张表中的 SQL DATE 比较

复合索引顺序 MySQL 查询

像在Facebook上那样显示和订购帖子

如何使用firebase通过查询进行订购[重复]

从 MySQL 中的时间戳排序表中按列选择第一个和最后一个匹配项

MySQL数据类型 - 日期和时间类型