在 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
这是我的数据,
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