爱喝奶茶~ 2021-12-15 20:02 采纳率: 50%
浏览 37
已结题

sql怎么求出每个时间段在线的人数。

数据库中的表
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点 多少人

  • 写回答

3条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2021-12-15 20:41
    关注

    这个呀,直观上来看,是如何让一行记录变多行的问题,
    比如第一行的小红,应该是8点、9点、10点各一条记录,这样才能根据时间进行分组,然后count。
    我先假定你这个表没有跨日记录的,where条件限制在了某一天,然后login和logout没有空值,
    然后假定8点30是算在8点的,
    那么其实有可能会出现一种情况,某个时间点没有人在线,为了保证数据连续性,所以得提前构造一个从0到23的一列数据(暂命名为h)作为一张表(暂命名为t),用来外关联你这张表
    接下来就是对你的原始表,把小时截取出来, 得到 登入小时、登出小时, 然后这两个数据的关联条件为 t.h between 登入小时 and 登出小时。
    这样,你就可以把一条记录按小时分解成了多条记录,最后再按t.h进行group by ,count行数即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月28日
  • 已采纳回答 7月20日
  • 创建了问题 12月15日