#mysql #sql #datetime #max #min
#mysql #sql #дата и время #макс #мин
Вопрос:
У меня есть 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
?
В конечном счете, я пытаюсь получить среднее pending_time
значение от всех user_tasks
за считанные секунды.
Ответ №1:
Если я правильно вас понял, вы можете использовать агрегацию:
select user_id, timediff(max(created_at), min(created_at)) pending_time
from user_tasks
where status = 'pending'
group by user_id