如何在日期分区中获取最近 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 个月数据的 SQL 查询

如何使用月份名称获取最近 3 个月的计数,如果该月份没有记录需要使用月份名称获取 0 [重复]

如何在 prometheus 中获取最近 3 个月内运行的 pod

如何在 sql server 中获取最近 3 个月的名称