有多个时间戳时,如何在一天中按小时对数据进行分组?

时间:2019-02-01 07:52:47

标签: mysql sql time timestamp

我有一个数据集,其中每个记录都有多个时间戳。我正在尝试汇总数据集,以按一天中的绝对小时获取每个时间戳的计数。

在只有一个时间戳的情况下,我可以按小时进行分组,但是在有多个时间戳的情况下,则无法进行分组。

我当前的数据:

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

1 个答案:

答案 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