MySQL: получить среднее значение разницы во времени? - PullRequest
12 голосов
/ 27 апреля 2010

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

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

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

Спасибо.

Ответы [ 2 ]

18 голосов
/ 27 апреля 2010
SELECT  DATE(start) AS startdate, AVG(TIME_TO_SEC(TIMEDIFF(end,start))) AS timediff
FROM    Sessions
GROUP BY
        startdate
1 голос
/ 29 июля 2017
SELECT  DATE(start) AS startdate, SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF((end,start))))) AS avgtimediff
FROM    Sessions
GROUP BY DATE(start)

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

...