如何在SQL中获取每个ID首次出现type='Y'的日期并填充至后续行
如何获取每个ID首次出现指定类型的日期并填充到所有行?
需求:获取每个ID的type列首次出现'Y'的日期,将该日期作为Start字段填充到对应ID的所有行中。
原始数据
id type date 1 Y 2022-01-01 1 Y 2022-01-09 1 X 2022-01-12 2 Y 2022-01-08 2 X 2022-01-09 2 X 2022-01-12
期望结果
id type date Start 1 Y 2022-01-01 2022-01-01 1 Y 2022-01-09 2022-01-01 1 X 2022-01-12 2022-01-01 2 Y 2022-01-08 2022-01-08 2 X 2022-01-09 2022-01-08 2 X 2022-01-12 2022-01-08
解决方案
无需手动遍历数据,使用SQL窗口函数即可高效实现:
SELECT id, type, date, -- 按ID分组,筛选出type为Y的日期并取最小值(首次出现的日期),填充到所有行 MIN(CASE WHEN type = 'Y' THEN date END) OVER (PARTITION BY id) AS Start FROM your_table;
逻辑说明:
CASE WHEN type = 'Y' THEN date END仅保留当前ID下type为Y的日期,其余行返回NULLMIN(...) OVER (PARTITION BY id)按ID分组,取分组内的最小日期(即首次出现Y的日期),并将该值同步到当前ID的所有行中
内容的提问来源于stack exchange,提问作者geek45
相关产品推荐
相关产品推荐

