gpt4 book ai didi

MySQL 查询计算行之间的时间差

转载 作者:行者123 更新时间:2023-11-29 02:40:35 24 4
gpt4 key购买 nike

我有一个关于在 mysql 中使用条件查询表的问题。

我创建了一个这样的存储过程:

SELECT A.*, TIMESTAMPDIFF(SECOND,A.start, COALESCE(MIN(B.start), NOW())) AS timespent_in_sec FROM activity_logs A LEFT JOIN  activity_logs B ON  B.user_id = A.user_id AND B.id > A.id WHERE A.user_id = userId AND A.start  >=   startDate  AND  A.start <= endDate GROUP BY A.id, Day(A.start) ORDER BY A.start ASC

其中 userId、startDate 和 endDate 是一个参数。

所以当我执行下面的程序时,结果是:

id      start                   activity            user_id     timespent_in_sec
--------------------------------------------------------------------------------
1 2018-11-12 10:37:53 Login 81 124
2 2018-11-12 10:39:57 1st Break 81 59
3 2018-11-12 10:40:56 1:1 Coaching 81 35
4 2018-11-12 10:41:31 2nd Break 81 76
5 2018-11-12 10:42:47 Logout 81 63384

所以我的目标是停止计算或在它们到达注销事件时将其设置为 0。像这样的事情:

id      start                   activity            user_id     timespent_in_sec
1 2018-11-12 10:37:53 Login 81 124
2 2018-11-12 10:39:57 1st Break 81 59
3 2018-11-12 10:40:56 1:1 Coaching 81 35
4 2018-11-12 10:41:31 2nd Break 81 76
5 2018-11-12 10:42:47 Logout 81 0 // means user has been logout and this will end the computation od timespent in sec

感谢您的帮助。提前致谢。

最佳答案

你可以尝试使用CASE WHEN表达式。

SELECT A.*, 
CASE WHEN activity = 'Logout'
THEN 0
ELSE TIMESTAMPDIFF(SECOND,A.start, COALESCE(MIN(B.start), NOW()))
END AS timespent_in_sec
FROM activity_logs A
LEFT JOIN activity_logs B ON B.user_id = A.user_id AND B.id > A.id
WHERE A.user_id = userId AND A.start >= startDate AND A.start <= endDate GROUP BY A.id, Day(A.start)
ORDER BY A.start ASC

关于MySQL 查询计算行之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com