我正在使用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。但是,如上所述,我不知道如何添加前 2 个月(201811 和 201812)。
就文档而言,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
编辑
正如Piotr所评论的那样,更优化的表达式(索引友好)是:
WHERE
mnth_nbr >= date_format(date '2019-01-01' - interval '2', '%Y%m')
这样的事情会有所帮助。 首先解析你的 int 到目前为止
date_parse(cast(first_table.mnth_nbr as varchar), 'yyyymm') > date '2019-01-01' - interval '2' month
请记住,使用此方法可能会遇到索引问题。