Как я могу сделать среднее число дат в MySQL?
Как я могу сделать среднее между датами в MySQL?
Меня больше интересуют значения времени, часов и минут.
В таблице с:
| date_one | datetime |
| date_two | datetime |
Выполнение запроса типа:
SELECT AVG(date_one-date_two) FROM some_table WHERE some-restriction-applies;
Edit:
Работает AVG(date1-date2)
, но я не знаю, какие данные он возвращает.
Ответы
Ответ 1
Это кажется немного хакерским, но будет работать в датах между 1970 и 2030 годами (на 32-битной арке). Вы по существу конвертируете значения datetime в integer, усредняя их и преобразовывая среднее значение обратно в значение datetime.
SELECT
from_unixtime(
avg(
unix_timestamp(date_one)-unix_timestamp(date_two)
)
)
FROM
some_table
WHERE
some-restriction-applies
Вероятно, есть лучшее решение, но это поможет вам сделать это.
Ответ 2
select avg(datediff(date1,date2))
select avg(timediff(datetime,datetime))
Ответ 3
SELECT date_one + (date_two - date_one) / 2 AS average_date
FROM thetable
WHERE whatever
Вы не можете суммировать даты, но вы можете вычесть их и получить промежуток времени, который вы можете уменьшить вдвое и добавить к первой дате.
Ответ 4
В ожидании вы могли бы сделать датированный в минутах от установленного времени, в среднем это, а затем добавить эти минуты к установленному времени...
Ответ 5
SELECT TIMESTAMPADD(MINUTE, TIMESTAMPDIFF(MINUTE, '2011-02-12 10:00:00', '2011-02-12 12:00:00')/2, '2011-02-12 10:00:00')
В результате
'2011-02-12 11:00:00'
Ответ 6
CREATE TABLE `some_table`
(
`some_table_key` INT(11) NOT NULL AUTO_INCREMENT,
`group_name` VARCHAR(128) NOT NULL,
`start` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`finish` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`some_table_key`)
);
SELECT
group_name,
COUNT(*) AS entries,
SEC_TO_TIME( AVG( TIME_TO_SEC( TIMEDIFF(finish, start) ) ) ) AS average_time
FROM some_table
GROUP BY
some_table.group_name
;
Вы всегда должны указывать нужную вам группу при использовании групповых функций, вы можете оказаться в некоторых неприятных беспорядках с групповыми функциями, если позже будете расширять запросы с помощью JOIN и т.д. и предположите, что MySql выберет для вас нужную группу.
Ответ 7
AVG - это функция группировки, что означает, что она суммирует все строки в таблице и делит на количество строк. Но похоже, что вы хотите, чтобы среднее из двух разных столбцов сообщалось отдельно для каждой строки. В этом случае вы должны просто вычислить его самостоятельно: (date1 + date2)/2. (MySQL может потребовать дополнительный синтаксис для правильного добавления этих столбцов.)
Код, который вы написали, даст вам среднее среднее значение истекшее время между датой 1 и датой 2.