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

Как я могу сделать среднее число дат в 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), но я не знаю, какие данные он возвращает.

4b9b3361

Ответ 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.