首页 > 解决方案 > Hive - 季度中的最大(而不是最后一个)日期

问题描述

我正在查询一个表,只想选择季度结束日期,我这样做是这样的:

select
    yyyy_mm_dd,
    id
from
    t1
where
    yyyy_mm_dd = cast(date_add(trunc(add_months(yyyy_mm_dd,3-pmod(month(yyyy_mm_dd)-1,3)),'MM'),-1) as date) --last day of q

对于每天的行,从2020-01-01until 2020-12-31,上述工作正常。但是,由于季度不完整,最终会省略 2021 行。如何修改 where 子句以便选择每个季度的最后一天当前季度的最大日期?

标签: sqlhivehiveql

解决方案


目前尚不清楚季度末日期是否有多行。取最大值并使用它可能更安全:

select t1.*
from (select t1.*,
             max(yyyy_mm_dd) over (partition by id, year(yyyy_mm_dd), quarter(yyyy_mm_dd)) as max_yyyy_mm_dd
      from t1
     ) t1
where yyyy_mm_dd = max_yyyy_mm_dd;

请注意,这t1.*用于选择。如果您只想要最大日期,您可以汇总:

select id, max(yyyy_mm_dd)
from t1
group by id, year(yyyy_mm_dd), quarter(yyyy_mm_dd);

推荐阅读