Presto SQL得到yyyymm减去2个月

时间:2019-01-12 00:22:22

标签: sql presto

我正在使用Presto。我有一个整数列(将其称为“ mnth_nbr”列),将年和月显示为:yyyymm。例如,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。但是,如上所述,我不知道如何添加前两个月(201811和201812)。

2 个答案:

答案 0 :(得分:1)

根据文档,Presto DB date_parse function需要一个类似MySQL的日期格式说明符。

因此,适合您的用例的条件应该是:

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

修改

如Piotr所评论,更优化的表达式(索引友好)将是:

WHERE 
    mnth_nbr >= date_format(date '2019-01-01' - interval '2', '%Y%m')

答案 1 :(得分:0)

这样的事情会有所帮助。首先解析您的int迄今为止

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

请记住,这种方法可能会遇到索引问题。