使用拆分时间间隔将sql查询转换为mysql

gg58donl  于 2021-06-19  发布在  Mysql
关注(0)|答案(0)|浏览(175)

我想请求帮助实现以下场景,我们有一个记录用户活动的表,在单行中有;我们记录开始和停止时间,并在行中更新结束时间时使用mysql触发器计算持续时间。
以下是表格结构

---------------------------------------------------
USERs Activity Table
---------------------------------------------------

created_at              Event       User            Start_timestamp         End_Timestamp           Duration
-------------------     ---------   -------         -------------------     -------------------     --------
2018-11-20 18:01:22     LOGIN       john.doe        2018-11-20 18:01:22     2018-11-20 19:01:22     3600
2018-11-20 18:01:22     LOGIN       jane.miller     2018-11-20 18:10:03     2018-11-20 20:10:03     7200
2018-11-20 18:15:16     BREAK       john.doe        2018-11-20 18:15:16     2018-11-20 18:33:47     300
2018-11-20 18:33:47     ONCALL      john.doe        2018-11-20 18:33:47     2018-11-20 18:36:47     180

我们想生成一个报告,可以给我们15分钟的间隔,所有用户如下所示

---------------------------------------------------
Desired Result in 15 minutes time interval 
---------------------------------------------------

Intervals               User            LOGIN TIME      BREAK TIME      CALL TIME
-------------------     ----------      ----------      ----------      ---------
2018-11-20 18:00:00     john.doe        00:15:00        00:00:00        00:00:00
2018-11-20 18:00:00     jane.miller     00:04:57        00:00:00        00:00:00
2018-11-20 18:15:00     john.doe        00:15:00        00:00:00        00:00:00
2018-11-20 18:15:00     jane.miller     00:15:00        00:00:00        00:00:00
2018-11-20 18:30:00     john.doe        00:15:00        00:15:00        00:00:00
2018-11-20 18:30:00     jane.miller     00:15:00        00:00:00        00:00:00
2018-11-20 18:45:00     john.doe        00:15:00        00:03:15        00:03:00
2018-11-20 18:45:00     jane.miller     00:15:00        00:00:00        00:00:00
2018-11-20 19:00:00     john.doe        00:01:22        00:00:00        00:00:00
2018-11-20 19:00:00     jane.miller     00:15:00        00:00:00        00:00:00
2018-11-20 19:15:00     jane.miller     00:15:00        00:00:00        00:00:00
2018-11-20 19:30:00     jane.miller     00:15:00        00:00:00        00:00:00
2018-11-20 19:45:00     jane.miller     00:15:00        00:00:00        00:00:00
2018-11-20 20:00:00     jane.miller     00:10:03        00:00:00        00:00:00
-------------------                     ----------      ----------      ----------

我无法做到的是,每个事件只有一行,如果我得到基于15分钟间隔的报告,我得到的是事件开始的间隔的总持续时间,在15分钟间隔中显示30分钟的时间看起来是不对的。但应显示,例如1个间隔3分钟,其他间隔12分钟;在每个间隔中花费的实际时间。
请说明如何做到这一点。我还创建了一个临时表,该表以15分钟的间隔填充,我希望根据该表生成数据并使用联接,但我不是sql方面的Maven,需要你们的帮助/建议。
下面是我一直在玩的问题,但到目前为止没有成功。

SELECT 
      DATE_FORMAT(SEC_TO_TIME(TIME_TO_SEC(a.created_at) - TIME_TO_SEC(a.created_at) % (15 * 60)),"%Y-%m-%d %H:%i") AS time_interval
      , a.user
      , SEC_TO_TIME(IFNULL(SUM(CASE WHEN a.event = 'LOGIN' THEN a.duration END),0)) AS login_time
      , SEC_TO_TIME(IFNULL(SUM(CASE WHEN a.event = 'BREAK' THEN a.duration END),0)) AS break_time
      , SEC_TO_TIME(IFNULL(SUM(CASE WHEN a.event = 'ONCALL' THEN a.duration END),0)) AS talk_time
    FROM users_activity AS a
    WHERE a.created_at > '2018-11-20 00:00:00' 
    GROUP BY time_interval, a.user
    ORDER BY time_interval DESC;

sql篡改模式https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0d64482c499a07e9d1c7ec232915969e
提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题