数据库中的表
id name login logout
1 小红 2021-12-01 08:30:20 2021-12-01 10:10:20
1 小黄 2021-12-01 09:30:20 2021-12-01 12:10:20
1 小绿 2021-12-01 10:30:20 2021-12-01 18:10:20
想要看一天每个时间在线的人数
例如 8点 多少人
9点 多少人
10点 多少人
这个呀,直观上来看,是如何让一行记录变多行的问题,
比如第一行的小红,应该是8点、9点、10点各一条记录,这样才能根据时间进行分组,然后count。
我先假定你这个表没有跨日记录的,where条件限制在了某一天,然后login和logout没有空值,
然后假定8点30是算在8点的,
那么其实有可能会出现一种情况,某个时间点没有人在线,为了保证数据连续性,所以得提前构造一个从0到23的一列数据(暂命名为h)作为一张表(暂命名为t),用来外关联你这张表
接下来就是对你的原始表,把小时截取出来, 得到 登入小时、登出小时, 然后这两个数据的关联条件为 t.h between 登入小时 and 登出小时。
这样,你就可以把一条记录按小时分解成了多条记录,最后再按t.h进行group by ,count行数即可
根据时间进行分组,统计count
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!