如何在 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 中获取本季度与上一季度的对比的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hive SQL 中获取季度至今?

oracle sql 获取本季度所有月份,上季度所有月份

oracle sql 获取本季度所有月份,上季度所有月份

SQL数据库代码如何根据日期获取属于哪个季度

季度平均销售额与上一季度的平均销售额

季度平均销售额与上一季度的平均销售额