#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. Ух ты! Этот код запроса действительно решил проблему. Большое вам спасибо за помощь. Я искренне ценю время и усилия, которые вы потратили на решение этой проблемы.