sql - 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-01
until 2020-12-31
,上述工作正常。但是,由于季度不完整,最终会省略 2021 行。如何修改 where 子句以便选择每个季度的最后一天和当前季度的最大日期?
解决方案
目前尚不清楚季度末日期是否有多行。取最大值并使用它可能更安全:
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);
推荐阅读
- python - TypeError: element in array field Category: Can not merge type
and - android - 无法解决:Android Studio 3.1.3 中的 com.google
- smart-tv - 如何将智能电视 LG 配置为 wifi 接入点
- java - 合并 2 个具有空值的对象的数组列表
- html - 导航栏以较小的屏幕折叠并离开会影响将其向后扩展
- c# - Nuget 持续集成过程?
- c# - 从 Form2 更新 Form1 对象
- c# - JSON 中没有数据输出 - 得到 204 错误代码
- javascript - 获取 TypeError:尝试在 afterEach 中恢复 sinon 存根时无法读取未定义的属性“恢复”
- javascript - Chrome JavaScript 日期构造函数似乎获取 1884 年之前的日期错误