【问题标题】:Need help to order the time and date column in my MySQL table需要帮助来订购我的 MySQL 表中的时间和日期列
【发布时间】: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排序

标签: mysql sql sql-order-by


【解决方案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

【讨论】:

  • 哇!这个查询代码确实解决了这个问题。非常感谢你。我非常感谢您为解决这个问题所付出的时间和精力。
猜你喜欢
  • 2011-05-04
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
相关资源
最近更新 更多