Impala SQL - Как подсчитать месяцы между временными метками?

Используя Impala SQL, есть ли краткий способ подсчета количества месяцев между двумя временными метками?

Функция datediff возвращает только количество дней между двумя отметками времени, но я надеюсь, что есть элегантный способ выполнить тот же расчет для количества месяцев.


person misanuk    schedule 06.05.2015    source источник


Ответы (2)


К сожалению, на этот вопрос редко можно найти элегантный ответ, даже полностью популярные языки программирования, такие как Python. Ответ зависит от того, как вы определяете # of months between two timestamps.

Если бы мне нужно было решить эту проблему с помощью встроенных модулей Impala, я бы сначала отсортировал столбец временной метки, затем преобразовал временную метку в строку даты с помощью TO_DATE(ts), а затем использовал YEAR(date), MONTH(date) и DAY(date), чтобы извлечь компоненты из даты. строка и, наконец, используйте формулу, аналогичную https://stackoverflow.com/a/4040338/171965, с модификацией чтобы также сравнить номер дня и вычесть месяц, если номер дня более поздней даты меньше, чем номер дня более ранней даты.

person Jeff Hammerbacher    schedule 23.05.2015

MONTHS_BETWEEN(TIMESTAMP newer, TIMESTAMP older)

Назначение: Возвращает количество месяцев между датами двух значений TIMESTAMP. Может включать дробную часть, представляющую дополнительные дни в дополнение к полным месяцам между датами. Дробная составляющая вычисляется путем деления разницы в днях на 31 (независимо от месяца).

Тип возврата: ДВОЙНОЙ

Добавлено в: CDH 5.5.0 / Импала 2.3.0

person Dzamo Norton    schedule 06.08.2019