ГОД (AVG (год (дата))) отличается от КРУГЛЫЙ (AVG (год (дата))) - PullRequest
0 голосов
/ 30 ноября 2018

Подводя итоги практического вопроса:
Мне нужно запросить средний год из столбца datetime.Мое первоначальное решение было YEAR(AVG()) все даты.Но так как я не могу AVG() a datetime, я конвертирую даты в unix, а затем обратно в datetime:

SELECT 
    YEAR(FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(date1))))
FROM table1;

, который возвращает 1980

Правильный запрос:

SELECT 
    ROUND(AVG(YEAR(date1)))
FROM table1;

Что возвращает 1960
Второй запрос лучше по понятным причинам, но почему результаты отличаются?

1 Ответ

0 голосов
/ 30 ноября 2018

Похоже, ваши данные содержат даты ранее 1970-01-01.Функция UNIX_TIMESTAMP() возвращает 0 для дат более ранних, чем эпоха:

SELECT UNIX_TIMESTAMP('1969-12-31')
-- 0

Следовательно, результат для первого запроса смещен, поскольку он не считает <даты 1970 должным образом. </p>

...