Нужна помощь, чтобы упорядочить столбец времени и даты в моей таблице MySQL

#mysql #sql #sql-order-by

Вопрос:

Я хотел бы попросить некоторой помощи с точки зрения формулировки моего запроса, чтобы я мог достичь ожидаемого результата, указанного ниже. Я так много раз пытался достичь ожидаемого результата, но я всегда получаю фактический результат, который также показан ниже. Я использую MySQL в качестве своей СУБД. Кстати, если это невозможно сделать только с помощью запроса, пожалуйста, дайте мне знать, чтобы я мог проинформировать свою команду. Спасибо

Правило упорядочения:

Правило упорядочения сводится к последовательному отображению каждого набора периодов времени каждой даты. Например, 23-26 сентября [Отобразить первый набор периодов времени] -> следующий дисплей: 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')
 

Комментарии:

1. Заказ по дате,времени начала,времени окончания ?

2. Покажите пример запроса, который вы уже придумали сами. И, пожалуйста, не размещайте фактические результаты на другом веб-сайте, а размещайте их здесь.

3. Пожалуйста, опишите правило оформления заказа

4. @Jelle Я отредактировал содержание своего вопроса. Я добавил текущий sql-запрос, и с точки зрения отображения фактического вывода это изображение, которое переполнение стека не позволяет мне публиковать здесь из-за того, что для этого требуется 10 репутационных очков, поэтому я добавил только ссылку. Спасибо

5. Заказывайте по временному интервалу. Время начала, временной интервал. Время окончания, временной интервал. Дата, тогда

Ответ №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')
 

Смотрите демонстрацию.

Комментарии:

1. Ух ты! Этот код запроса действительно решил проблему. Большое вам спасибо за помощь. Я искренне ценю время и усилия, которые вы потратили на решение этой проблемы.