首页 > 解决方案 > 在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;

有人可以帮帮我吗 。

标签: sqlgreatest-n-per-group

解决方案


您可以使用条件窗口函数:

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;

推荐阅读