从所有行中获取 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列中存在的所有行中删除重复值[duplicate]
mysql TIMEDIFF 和 TIMESTAMPDIFF的使用(问题记录)
在 MySQL 中使用 timediff 函数计算 12 小时格式的时差