如何查询row_num分组下唯一最大event_date的行及非最大日期行
SQL查询需求实现方案
假设你的表名为your_table,以下是针对两个需求的SQL实现:
需求1:查询每个row_num分组中仅存在一条最大event_date的行
该需求需同时满足两个条件:行的event_date是所在row_num分组的最大值,且该最大值在分组内仅出现一次。用窗口函数可快速实现:
SELECT row_num, row_id, event_date FROM ( SELECT *, -- 标记当前行所在分组的最大event_date MAX(event_date) OVER (PARTITION BY row_num) AS max_date, -- 统计当前event_date在分组内的出现次数 COUNT(*) OVER (PARTITION BY row_num, event_date) AS date_count FROM your_table ) sub_query -- 筛选出是最大日期且仅出现一次的行 WHERE event_date = max_date AND date_count = 1;
需求2:查询同row_num分组下不包含最大event_date的行
只需找出分组内event_date不等于该组最大值的所有行,两种实现方式可选:
方式一:窗口函数实现
SELECT row_num, row_id, event_date FROM ( SELECT *, MAX(event_date) OVER (PARTITION BY row_num) AS max_date FROM your_table ) sub_query WHERE event_date != max_date;
方式二:子查询关联实现
SELECT t.row_num, t.row_id, t.event_date FROM your_table t JOIN ( -- 先获取每个分组的最大event_date SELECT row_num, MAX(event_date) AS max_date FROM your_table GROUP BY row_num ) m ON t.row_num = m.row_num -- 筛选出日期不等于分组最大值的行 WHERE t.event_date != m.max_date;
内容的提问来源于stack exchange,提问作者Itachi_16
相关产品推荐
相关产品推荐

