首页 > 解决方案 > Presto SQL 得到 yyyymm 减去 2 个月

问题描述

我正在使用 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),如上所述。

标签: sqldatetimeleft-joinprestodate-arithmetic

解决方案


就文档而言,Presto DBdate_parse函数需要一个类似 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')

推荐阅读