在 sql 中查找每个类别和子类别的最大日期

find max date for each category and sub category in 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;

谁能帮帮我。

您可以使用条件 window 函数:

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;

使用条件window聚合:

select t.*,
    max(date) over(partition by id) max_date,
    max(case when level = 1 then date end) over(partition by id) level1_max_date,
    max(case when level = 2 then date end) over(partition by id) level2_max_date
from mytable t