如何在日期分区中获取最近 3 个月
Posted
技术标签:
【中文标题】如何在日期分区中获取最近 3 个月【英文标题】:How to get the last 3 months in date partitions 【发布时间】:2019-09-03 18:56:51 【问题描述】:我在日期列上有一个配置单元表分区。现在我想得到它的最后 3 个月,因为它每天都在运行。
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
【问题讨论】:
您是在寻找最近三个月的分区数据还是只是最近三个月的分区列,如上所示。根据您的尝试,可以使用 Hive 和 shell 来完成。你能清楚吗?我在这里有点困惑。 我正在使用 hive 查找最近 3 个月的数据。 @ 解决.. 好吧,您在下面也有解释。您可以编辑您的问题并将以下行更改为:预期结果:获取最近 3 个月分区中的所有数据; 【参考方案1】:不确定您的配置单元版本是什么,但因为 1.1.0
支持 add_months
:
select current_timestamp();
+--------------------------+--+
| _c0 |
+--------------------------+--+
| 2019-09-03 17:10:30.396 |
+--------------------------+--+
既然你想要data >= '2019-07-01'
,你需要用trunc 做-2
。
以current_timestamp()
为参考,如果它的自动化过程和您想要相同的日期,那么您可以按原样使用,也可以是任何date
数据类型值。
如下所示:
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 |
+-------------+--+
仅供参考:
trunc(TIMESTAMP 日期,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(TIMESTAMP 日期,BIGINT|INT 月)
返回指定的日期和时间加上一些月数。
正好 -3 个月,不是月初
select add_months(current_timestamp(), -3) ;
+-------------+--+
| _c0 |
+-------------+--+
| 2019-06-03 |
+-------------+--+
-3 个月日期的开始日期:
select add_months(trunc(current_timestamp(), 'MONTH'), -3) ;
+-------------+--+
| _c0 |
+-------------+--+
| 2019-06-01 |
+-------------+--+
【讨论】:
以上是关于如何在日期分区中获取最近 3 个月的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 SQL Server 中的分组列根据日期列的最近 3 个月获取列平均值?
如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?
如何使用月份名称获取最近 3 个月的计数,如果该月份没有记录需要使用月份名称获取 0 [重复]