我有一个数据集,其中每个记录都有多个时间戳。我正在尝试汇总数据集,以按一天中的绝对小时获取每个时间戳的计数。
在只有一个时间戳的情况下,我可以按小时进行分组,但是在有多个时间戳的情况下,则无法进行分组。
我当前的数据:
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
答案 0 :(得分: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