sql - 在sql中查找每个类别和子类别的最大日期
问题描述
这是我的数据的样子,
id level date
a 1 2019-05-09
a 1 2018-09-24
a 2 2019-12-06
a 2 2020-04-28
b 1 2019-08-23
b 1 2019-05-03
b 1 2020-04-30
b 2 2019-09-11
b 2 2020-07-03
我需要我的输出是这样的,
id level date max_date level1_max_date level2_max_date
a 1 2019-05-09 2020-04-28 2019-05-09 2020-04-28
a 1 2018-09-24 2020-04-28 2019-05-09 2020-04-28
a 2 2019-12-06 2020-04-28 2019-05-09 2020-04-28
a 2 2020-04-28 2020-04-28 2019-05-09 2020-04-28
b 1 2019-08-23 2020-07-03 2020-04-30 2020-07-03
b 1 2019-05-03 2020-07-03 2020-04-30 2020-07-03
b 1 2020-04-30 2020-07-03 2020-04-30 2020-07-03
b 2 2019-09-11 2020-07-03 2020-04-30 2020-07-03
b 2 2020-07-03 2020-07-03 2020-04-30 2020-07-03
我尝试使用此查询来获取 max_date ,但不确定获取 level1_max_date 和 level2_max_date 的逻辑。
select id
, level
, date
, max(date) over(partition by id) as max_date
from table;
有人可以帮帮我吗 。
解决方案
您可以使用条件窗口函数:
select t.*,
max(date) over (partition by id) as max_date,
max(case when level = 1 then date end) over (partition by id) as max_date_level_1,
max(case when level = 2 then date end) over (partition by id) as max_date_level_2
from table gt;
推荐阅读
- azure-web-app-service - Azure 网站的波动响应时间
- swift - 为什么当 VC 从右移时 MessageKit(`JSQMessagesViewController` 替换)输入字段消失?
- ruby-on-rails - 生产红宝石中未显示条纹卡元素
- c - C 预处理器 - 在编译时向 Struct 添加元素
- asp.net-mvc - 如何在 MVC 的部分视图中填充导航选项卡上的数据?
- c++ - C++定义静态成员的正确方法是什么
- haskell - 如何在 Haskell 中为 IO 专门化 mapM
- gatling - Gatling:响应时间百分位数和延迟百分位数随时间的差异
- java - Libgdx 播放/暂停音乐
- android - 避免按下后退按钮时关闭 AlertDialog