MySQL: получить среднее значение разницы во времени?
у меня есть таблица под названием Sessions с двумя столбцами datetime: start и end.
для каждого дня (гггг-ММ-ДД) может быть много разных времен начала и окончания (чч:ii:СС). Мне нужно найти среднесуточное значение всех различий между этими временами начала и конца.
примером нескольких строк будет:
start: 2010-04-10 12:30:00 end: 2010-04-10 12:30:50
start: 2010-04-10 13:20:00 end: 2010-04-10 13:21:00
start: 2010-04-10 14:10:00 end: 2010-04-10 14:15:00
start: 2010-04-10 15:45:00 end: 2010-04-10 15:45:05
start: 2010-05-10 09:12:00 end: 2010-05-10 09:13:12
...
разницы во времени (в секундах) для 2010-04-10 будет:
50
60
300
5
среднее значение для 2010-04-10 будет 103,75 секунды. Я хотел бы, чтобы мой запрос вернул что-то вроде:
day: 2010-04-10 ave: 103.75
day: 2010-05-10 ave: 72
...
Я могу получить разницу во времени, сгруппированную по дате начала, но я не уверен, как получить среднее значение. Я попытался использовать функцию AVG, но я думаю, что она работает только непосредственно над значениями столбцов (а не результатом другой агрегатной функции).
вот что у меня есть:
SELECT
TIME_TO_SEC(TIMEDIFF(end,start)) AS timediff
FROM
Sessions
GROUP BY
DATE(start)
есть ли способ получить среднее значение timediff для каждой группы дат начала? Я новичок в aggregate функциях, поэтому, возможно, я что-то не так. Если вы знаете альтернативное решение, Пожалуйста, поделитесь.
Я всегда мог бы сделать это ad hoc и вычислить среднее вручную в PHP, но мне интересно, есть ли способ сделать это в MySQL, чтобы я мог избежать запуска кучи циклов.
спасибо.
2 ответов
SELECT DATE(start) AS startdate, AVG(TIME_TO_SEC(TIMEDIFF(end,start))) AS timediff
FROM Sessions
GROUP BY
startdate
SELECT DATE(start) AS startdate, SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF((end,start))))) AS avgtimediff
FROM Sessions
GROUP BY DATE(start)
Это даст среднее значение, поскольку время предыдущего ответа дает число.