【问题标题】:How can I get Quarter To date Vs Previous Quarter to Date in Hive SQL如何在 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())

请指教。

谢谢

【问题讨论】:

    标签: date hive hiveql


    【解决方案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)));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多