从所有行中获取 MySQL 中的 TIMEDIFF()

Posted

技术标签:

【中文标题】从所有行中获取 MySQL 中的 TIMEDIFF()【英文标题】:Get TIMEDIFF() in MySQL from all rows 【发布时间】:2021-01-10 14:04:11 【问题描述】:

我有一个像这样的user_tasks 表:

| id | user_id | created_at          | status   |
-------------------------------------------------
| 1  | 1       | 2020-08-04 13:00:00 | started  |
| 2  | 1       | 2020-08-04 13:00:00 | pending  |
| 3  | 1       | 2020-08-04 13:00:10 | pending  |
| 4  | 1       | 2020-08-04 13:00:40 | pending  |
| 5  | 1       | 2020-08-04 13:00:41 | finished |

我想以秒为单位获取最后一个pending 状态和第一个pending 状态之间的差异。因此我有这个查询:

SELECT 
    TIMEDIFF(
    (SELECT created_at FROM user_tasks WHERE user_id = 1 AND `status` = 'pending' ORDER BY created_at DESC LIMIT 1), 
    (SELECT created_at FROM user_tasks WHERE user_id = 1 AND `status` = 'pending' ORDER BY created_at ASC LIMIT 1)
    ) AS pending_time

这让我在几秒钟内得到结果(-00:00:40),正如预期的那样。但是,我怎样才能为每个user_task 实现这一目标?

最终,我试图在几秒钟内从所有 user_tasks 中获得平均 pending_time

【问题讨论】:

【参考方案1】:

如果我没听错,你可以使用聚合:

select user_id, timediff(max(created_at), min(created_at)) pending_time
from user_tasks
where status = 'pending'
group by user_id

【讨论】:

以上是关于从所有行中获取 MySQL 中的 TIMEDIFF()的主要内容,如果未能解决你的问题,请参考以下文章

mysql timediff 休息 12 小时

如何从mysql列中存在的所有行中删除重复值[duplicate]

mysql TIMEDIFF 和 TIMESTAMPDIFF的使用(问题记录)

在 MySQL 中使用 timediff 函数计算 12 小时格式的时差

在 MySQL 5.7 中获取最高分数和最高分数行中的字段 [重复]

MYSQL 使用 GROUP BY 到 SUM timediff 得到总打开时间