如何获取日期分区中的最近3个月

时间:2019-09-03 18:56:51

标签: hiveql

我在date列上有一个配置单元表分区。现在,我想获取它每天运行的最后三个月。

show partitions test;
OK
test_month=2019-05-01
test_month=2019-06-01
test_month=2019-07-01
test_month=2019-08-01
test_month=2019-09-01

datediff(test_month, to_date(CURRENT_DATE)) >= 90;

test_month <= DATEADD(MONTH, 90, GETDATE());

预期结果: 获取过去3个月分区中的所有日期;

所需的输出: select DISTINCT(test_month) from test where test_month <code>

应该给出:

test_month=2019-07-01
test_month=2019-08-01
test_month=2019-09-01

1 个答案:

答案 0 :(得分:1)

不确定您的配置单元版本是什么,但是由于1.1.0支持add_months

select current_timestamp();

+--------------------------+--+
|           _c0            |
+--------------------------+--+
| 2019-09-03 17:10:30.396  |
+--------------------------+--+

由于您想要data >= '2019-07-01',因此需要对{tr1}进行截断。

-2作为参考,如果它的自动过程和您想要相同的日期,则可以按原样使用,也可以是任何current_timestamp()数据类型值。 如下所示:

date

仅供参考:

trunc(时间戳日期,STRING个单位)

  

剥离字段,并可以选择舍入TIMESTAMP值。那个单位   参数值区分大小写。该参数字符串可以是以下之一:   SYYYY,YYYY,YEAR,SYEAR,YYY,YY,Y:年份。问:季度。星期一,星期一   MM,RM:月。 WW,W:与星期几的第一天相同   月。 DDD,DD,J:天。 DAY,DY,D:星期几。 (不   必须是当前日期。)HH,HH12,HH24:小时。 TIMESTAMP值   截断到小时总是以24小时表示法表示,即使   HH12参数字符串。 MI:分钟。

add_months(时间戳日期,BIGINT | INT个月)

  

返回指定的日期和时间以及一些月份。

确切-3个月,而不是每月开始

select DISTINCT(test_month) from test 
where test_month >= add_months(trunc(current_timestamp(), 'MONTH'), -2)

select add_months(trunc(current_timestamp(), 'MONTH'), -2) ;
+-------------+--+
|     _c0     |
+-------------+--+
| 2019-07-01  |
+-------------+--+

开始日期为-3个月的日期:

select add_months(current_timestamp(), -3) ;
+-------------+--+
|     _c0     |
+-------------+--+
| 2019-06-03  |
+-------------+--+

相关问题