如何在 Hive SQL 中获取本季度与上一季度的对比
Posted
技术标签:
【中文标题】如何在 Hive SQL 中获取本季度与上一季度的对比【英文标题】:How can I get Quarter To date Vs Previous Quarter to Date in Hive SQL 【发布时间】:2017-09-05 22:55:35 【问题描述】:我目前正在使用 Hive SQL。我知道如何获取当前季度的日期,但是我正在努力获取上一季度的日期
示例: 今天是 2017 年 9 月 5 日 当前季度至今 (QTD) 为 07/01/2017 - 09/05/2017。 (2个月零5天)
现在,我想得到以前的 QTD,所以它应该给我 2017 年 4 月 1 日 - 2017 年 6 月 5 日(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】:不确定您的要求是否仍然是 Apples to Apples,因为您在描述中提到的 2 个月和 5 天会因月份而异。例如:非闰年的 1 月至 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)));
我没有检查过像月末/季末这样的极端情况,假设你的逻辑是正确的。
【讨论】:
以上是关于如何在 Hive SQL 中获取本季度与上一季度的对比的主要内容,如果未能解决你的问题,请参考以下文章