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

标签 mysql sql

我有一个关于在 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/

相关文章:

php - MYSQL 查询 $result[x] 停止工作

PHP MySQL 搜索数组中的数据

PHP PDO bindValue 使用 MySQL IN()?

执行 count() 后与 Group by 子句一起使用的 SQL where 子句

sql - 如何将两个 SQL 查询合并为一个?

sql - 如何在 SQL Server 2008 中获取每组的第一条和最后一条记录?

mysql - SUM 加入字段

SQL 执行返回的结果与直接在 MS SQL Server Management Studio 中执行不同

mysql - 如何选择与其他列匹配的列更多的结果?

php - Laravel4.2中如何获取与另一个模型相关但与父模型不直接相关的模型的详细信息