Вопрос по mysql, sql – Как я могу сделать среднее число дат в MySQL?

21

Как я могу сделать среднее между датами в MySQL? Меня больше интересуют значения времени, часы и минуты.

На столе с:

<code>| date_one   | datetime |
| date_two   | datetime |
</code>

Делать запрос как:

<code> SELECT AVG(date_one-date_two) FROM some_table WHERE some-restriction-applies;
</code>
Edit:

AVG(date1-date2) работает, но я понятия не имею, какие данные он возвращает.

Ваш Ответ

7   ответов
1
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 выберет правильную группу для вас.

Error: User Rate Limit Exceeded
1

вы можете сделать датировку в минутах от установленного времени, усреднить это, а затем добавить эти минуты обратно к установленному времени ...

0

которая означает, что она суммирует все строки в таблице и делит их на количество строк. Но это звучит так, как будто вы хотите получить среднее из двух разных столбцов, сообщаемых отдельно для каждой строки. В этом случае вы должны просто вычислить его самостоятельно: (date1 + date2) / 2. (MySQL может потребоваться дополнительный синтаксис для правильного добавления этих столбцов.)

Код, который вы написали, даст вам среднее значение таблицыelapsed время между датой 1 и датой 2.

2
SELECT date_one + (date_two - date_one) / 2 AS average_date
FROM thetable
WHERE whatever

но вы можете вычесть их и получить интервал времени, который можно уменьшить вдвое и добавить к первой дате.

24

но будет работать для дат с 19 по 2030 (на 32-битной арке). По сути, вы конвертируете значения даты и времени в целое число, усредняете их и конвертируете среднее значение обратно в значение даты и времени.

SELECT
    from_unixtime(
        avg(
            unix_timestamp(date_one)-unix_timestamp(date_two)
        )
    )
FROM
    some_table
WHERE
    some-restriction-applies

Там, вероятно, есть лучшее решение, но это поможет вам в крайнем случае.

2
SELECT TIMESTAMPADD(MINUTE, TIMESTAMPDIFF(MINUTE, '2011-02-12 10:00:00', '2011-02-12 12:00:00')/2, '2011-02-12 10:00:00')

8
select avg(datediff(date1,date2))
select avg(timediff(datetime,datetime))

Похожие вопросы