如何在配置单元sql中获得季度到目前为止与上一季度到目前为止的数据

rlcwz9us  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(354)

我目前正在使用配置单元sql。我知道如何让当前季度的日期,但我正在努力使上一季度的日期
示例:今天是2017年9月5日,当前季度截止日期(qtd)是2017年1月7日-2017年5月9日(2个月零5天)
现在,我想得到上一个qtd,所以它应该给我04/01/2017-06/05/2017(2个月零5天)。这样我就可以比较苹果了。完全一样的日子。
注意:我有一个较旧版本的配置单元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())

请告知。
谢谢

hgncfbus

hgncfbus1#

不确定您的要求是否仍然是完全一致的,因为您在描述中提到的2个月和5天会因月份而异。例如:2个月零5天对于非闰年的1月5日是63天,对于4月5日到6月5日是66天。
即使你按天数计算,当你在6月30日左右做比较的时候,也会有巨大的危险,你会把四分之一的硬币洒出来。
假设它的天数,除了使用from\u unixtime(unix\u 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)));

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

相关问题