需要帮助来订购我的 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 表中的时间和日期列的主要内容,如果未能解决你的问题,请参考以下文章