如何在Hive SQL中获取Quarter To date Vs上一季度的日期

时间:2017-09-05 22:55:36

标签: date hive hiveql

我目前正在使用Hive SQL。我知道如何获得当前季度,但是我在努力获得上一季度至今

实施例: 今天是2017年9月5日 目前的季度到目前为止(QTD)是2017年1月7日至2017年9月9日。 (2个月零5天)

现在,我想获得之前的QTD,所以它应该给我 04/01/2017 - 06/05/2017(2个月和5天)。这样我就比较苹果和苹果。完全相同的日子。

注意:我有一个旧版本的hive sql

目前使用的QTD:

select * from table
where date_col >= printf('%04d-%02d-%02d',year(FROM_UNIXTIME(UNIX_TIMESTAMP()),),(((month(FROM_UNIXTIME(UNIX_TIMESTAMP()),)-1) div 3) * 3) + 1,1)
AND date_col <= FROM_UNIXTIME(UNIX_TIMESTAMP())

现在,对于之前的QTD,我尝试使用以下内容: 下面的SQL脚本给了我4/01/2017 - 今天...但是我想得到4/01/2017 - 06/05/2017因此它与当前的QTD完全相同

select * from table
where date_col >= printf('%04d-%02d-%02d',year(FROM_UNIXTIME(UNIX_TIMESTAMP()),),(((month(FROM_UNIXTIME(UNIX_TIMESTAMP()),)-1) div 6) * 3) + 1,1)
AND date_col <= FROM_UNIXTIME(UNIX_TIMESTAMP())

请指教。

由于

1 个答案:

答案 0 :(得分:0)

不确定您的要求是否仍然是Apples苹果,因为您在说明中提到的2个月和5天将根据月份而有所不同。例如:1个月和5天是非闰年1月到3月的63天,4月 - 6月是66天。

即使你按天数去了,当你在6月30日左右进行比较时,你也会有很大的危险。

假设它的天数,您已经自己确定了大部分解决方案,除了您使用FROM_UNIXTIME(UNIX_TIMESTAMP())作为结束日期。

我会看到解决方案首先计算到本季度的天数,然后将其添加到上一季度的开始日期。

select date_add(printf('%04d-%02d-
%02d',year(FROM_UNIXTIME(UNIX_TIMESTAMP())),
(((month(FROM_UNIXTIME(UNIX_TIMESTAMP()))-1) div 6) * 3) + 
1,1),datediff(FROM_UNIXTIME(UNIX_TIMESTAMP()),printf('%04d-%02d-
%02d',year(FROM_UNIXTIME(UNIX_TIMESTAMP())),
(((month(FROM_UNIXTIME(UNIX_TIMESTAMP()))-1) div 3) * 3) + 1,1)));

我没有检查像月末/季末那样的角落情况,假设你的逻辑是正确的。