如何在 Hive SQL 中获得季度至今与上一季度至今的对比

How can I get Quarter To date Vs Previous Quarter to Date in Hive SQL

我目前正在使用 Hive SQL。我知道如何获得当前季度的最新数据,但是我正在努力获得上一季度的最新数据

示例: 今天是2017年9月5日 当前季度至今 (QTD) 是 07/01/2017 - 09/05/2017。 (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())

请指教。

谢谢

不确定您的要求是否仍然是苹果对苹果,因为您在描述中提到的 2 个月和 5 天会因月份而异。例如:对于非闰年的 1 月 5 日至 3 月 5 日,2 个月零 5 天为 63 天,而对于非闰年的 4 月至 6 月 5 日,则为 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)));

我还没有检查月 end/quarter 结束之类的极端情况,假设你的逻辑是正确的。