当有多个时间戳时,如何在mysql中按小时分组数据?
我有一个数据集,其中每个记录都有多个时间戳。我试图对数据集进行汇总,以按一天中的绝对小时获得每个时间戳的计数 当只有一个时间戳时,我可以按小时进行分组,但当我有多个时间戳时,我无法这样做 我目前的数据:当有多个时间戳时,如何在mysql中按小时分组数据?,mysql,sql,time,timestamp,Mysql,Sql,Time,Timestamp,我有一个数据集,其中每个记录都有多个时间戳。我试图对数据集进行汇总,以按一天中的绝对小时获得每个时间戳的计数 当只有一个时间戳时,我可以按小时进行分组,但当我有多个时间戳时,我无法这样做 我目前的数据: MemberID Appointment_Time CheckIn_Time CheckOut_Time 1 12:20pm 01:30pm 05:00pm 2 09:00am
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
函数假定您使用的是日期/日期时间列):
您是否真的将文本
12:20pm
存储在表中?时间作为时间戳存储在数据库中
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