sql 语句统计时间求指导

快乐的一只小青蛙 发布于 2020/07/04 19:12
阅读 202
收藏 1

软件工程师和算法工程师速来!正在直播:如何使用英特尔oneAPI工具实现PyTorch 优化>>>

现有表有如下字段:
| UserID | BeginTime | EndTime | other... |

BeginTime和EndTime这里看做上下线时间。 现在需要统计指定时间内, 至少3个用户同时在线的时间(时间精确到秒,不到3个用户同时在线不计算, 超过3个也只计算一份)。
假设有如下数据:

| UserID | BeginTime | EndTime   |
| 1      | *** 12:00 | *** 12:30 |
| 2      | *** 12:00 | *** 12:30 |
| 3      | *** 12:10 | *** 12:30 |
| 4      | *** 12:20 | *** 12:40 |
| 5      | *** 12:20 | *** 12:50 |
| 1      | *** 12:40 | *** 12:50 |
| 2      | *** 12:35 | *** 13:00 |

12:00 - 12:10 有2个人同时在线,不计算时间
12:10 - 12:30 有最少3人在线,最高4人, 获得累计时间20分钟
12:30 - 12:40 只有2人同时在线,不计算时间
12:40 - 12:50 有3三在线,获得累计时间 10分钟
12:50 - 13:00 只有1人同时在线,不计算时间

统计时间 12:00 - 13:00 这个时间段, 得出时间 30分钟

求大神们指导下,这个怎么用SQL语句统计出来

加载中
0
山下农-山上仙
山下农-山上仙

用反证法吧

可以计算 同时不在线的累计时间 同时不在线 就只有0,1,2 者三种情况

然后总时间减去这个三种情况的和就是同时在线的的情况

0
o
opal
select ntime from(
select count(1) as total, TIMESTAMPDIFF(MINUTE, max(beginTime, 统计开始), min(endTime, 统计结束) ntime
  from t1
 where 统计范围条件
) t2
where total >=3

 

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部