Как сгруппировать данные по часам дня в mysql при наличии нескольких временных меток?

0

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

Я могу выполнить группировку по часам, когда есть только одна временная метка, но не могу сделать это, когда у меня есть несколько временных меток.

Мои текущие данные:

MemberID    Appointment_Time    CheckIn_Time    CheckOut_Time
1           12:20pm             01:30pm         05:00pm
2           09:00am             08:30am         04:20pm
3           12:10pm             03:30pm         05:20pm

Что я хочу

Hour of the day #Appts  #CheckIns    #Checkouts
8                  0       1            0
9                  1       0            0
10                 0       0            0
11                 0       0            0
12                 2       0            0
1                  0       1            0
2                  0       0            0
3                  0       1            0
4                  0       0            1
5                  0       0            2
  • 2
    Вы на самом деле храните текст 12:20pm в своей таблице?
  • 0
    Время хранится в виде метки времени в базе данных.
Теги:
database
timestamp
time

1 ответ

1

Одним из возможных решений является использование условного агрегирования (функция HOUR предполагает, что вы используете столбец date/datetime):

SELECT hourlist.hh hour_of_day
     , COUNT(CASE WHEN HOUR(Appointment_Time) = hourlist.hh THEN 1 END) appts
     , COUNT(CASE WHEN HOUR(CheckIn_Time) = hourlist.hh THEN 1 END) checkins
     , COUNT(CASE WHEN HOUR(CheckOut_Time) = hourlist.hh THEN 1 END) checkouts
FROM (
    SELECT 0 AS hh UNION ALL
    SELECT 1 UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 UNION ALL
    SELECT 6 UNION ALL
    SELECT 7 UNION ALL
    SELECT 8 UNION ALL
    SELECT 9 UNION ALL
    SELECT 10 UNION ALL
    SELECT 11 UNION ALL
    SELECT 12 UNION ALL
    SELECT 13 UNION ALL
    SELECT 14 UNION ALL
    SELECT 15 UNION ALL
    SELECT 16 UNION ALL
    SELECT 17 UNION ALL
    SELECT 18 UNION ALL
    SELECT 19 UNION ALL
    SELECT 20 UNION ALL
    SELECT 21 UNION ALL
    SELECT 22 UNION ALL
    SELECT 23
) AS hourlist
LEFT JOIN appointments ON hourlist.hh IN (HOUR(Appointment_Time), HOUR(CheckIn_Time), HOUR(CheckOut_Time))
GROUP BY hourlist.hh

Ещё вопросы

Сообщество Overcoder
Наверх
Меню