PostgreSQL按id分组更新date2:下一行date1减1,末行设固定值
PostgreSQL更新实现方案
实现逻辑
核心使用PostgreSQL内置窗口函数LEAD()完成同组下一行值的获取,完全匹配更新规则:
- 按
id字段分组,组内按date1升序排序 - 用
LEAD(date1)获取当前行同组下一行的date1值 - 非最后一行:
date2 = 下一行date1值 - 1天 - 同组最后一行:
date2 = '2999-12-31'
完整SQL代码
WITH next_date_calc AS ( SELECT id, date1, LEAD(date1) OVER (PARTITION BY id ORDER BY date1) AS next_date1 FROM t ) UPDATE t SET date2 = COALESCE(next_date_calc.next_date1 - INTERVAL '1 day', '2999-12-31'::DATE) FROM next_date_calc WHERE t.id = next_date_calc.id AND t.date1 = next_date_calc.date1;
注意事项
如果表有单独主键字段,建议将WHERE条件中的关联逻辑换成主键关联,避免同id下出现重复date1导致更新异常。
内容的提问来源于stack exchange,提问作者yuoggy
相关产品推荐
相关产品推荐

