У меня есть набор данных, где каждая запись имеет несколько временных отметок. Я пытаюсь обобщить набор данных, чтобы получить счет каждой временной отметки по абсолютному часу дня.
Я могу выполнить группировку по часам, когда есть только одна временная метка, но не могу сделать это, когда у меня есть несколько временных меток.
Мои текущие данные:
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
Одним из возможных решений является использование условного агрегирования (функция 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
12:20pm
в своей таблице?