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)

Это даст среднее значение, поскольку время предыдущего ответа дает число.