Подтвердить что ты не робот

MySQL: Получите среднее значение разницы во времени?

У меня есть таблица, называемая сеансами с двумя столбцами datetime: начало и конец.

В течение каждого дня (ГГГГ-ММ-ДД) может быть много разных начальных и конечных времен (HH: ii: ss). Мне нужно найти среднесуточное значение всех различий между этими начальными и конечными временами.

Пример нескольких строк:

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 для каждой группы дат начала? Я новичок в совокупности функций, поэтому, возможно, я что-то не понимаю. Если вы знаете альтернативное решение, поделитесь им.

Я всегда мог делать это ad hoc и вычислять среднее вручную на PHP, но мне интересно, есть ли способ сделать это в MySQL, поэтому я могу избежать запуска пучков.

Спасибо.

4b9b3361

Ответ 1

SELECT  DATE(start) AS startdate, AVG(TIME_TO_SEC(TIMEDIFF(end,start))) AS timediff
FROM    Sessions
GROUP BY
        startdate

Ответ 2

SELECT  DATE(start) AS startdate, SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF((end,start))))) AS avgtimediff
FROM    Sessions
GROUP BY DATE(start)

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