Presto SQL получим ггггмм минус 2 месяца - PullRequest
0 голосов
/ 12 января 2019

Я использую Presto. У меня есть целочисленный столбец (назовем его «mnth_nbr»), показывающий год и месяц как: ггггмм. Например, 201901. Я хочу иметь записи, показывающие все даты ПОСЛЕ 201901, а также за 2 месяца до указанной даты. В этом примере он вернет 201811, 201812, 201901, 201902, 201903 и т. Д. Имейте в виду, что мой тип данных здесь целочисленный.

Это то, что у меня есть (я сам присоединяюсь):

select ... 
from table 1 as first_table
left join table 1 as second_table 
on first_table.mnth_nbr = second_table.mnth_nbr
where first_table.mnth_nbr <= second_table.mnth_nbr

Я знаю, что это дает мне все даты после 201901 года, включая 201901. Но я не знаю, как добавить 2 предыдущих месяца (201811 и 201812), как объяснено выше.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Что касается документации, Presto DB date_parse функция ожидает MySQL-подобный спецификатор формата даты.

Таким образом, правильное условие для вашего варианта использования должно быть:

SELECT ...
FROM mytable t
WHERE 
    date_parse(cast(t.mnth_nbr as varchar), '%Y%m') >= date '2019-01-01' - interval '2' month

Редактировать

Как прокомментировал Петр, более оптимизированное выражение (с учетом индекса) будет:

WHERE 
    mnth_nbr >= date_format(date '2019-01-01' - interval '2', '%Y%m')
0 голосов
/ 12 января 2019

Нечто подобное поможет. сначала проанализируйте ваш int на сегодняшний день

date_parse(cast(first_table.mnth_nbr as varchar), 'yyyymm') > date '2019-01-01' - interval '2' month

Имейте в виду, что при таком подходе у вас могут возникнуть проблемы с индексацией.

...