输入表:
date_1 date_2 ID
2019-01-01 2019-06-30 1
2019-05-01 2019-05-31 1
2019-06-01 2019-07-30 1
2019-01-02 2019-02-28 2
2019-03-01 2019-08-30 2
2019-01-02 2019-02-28 3
2019-02-06 2019-08-30 3
我正在研究一个复杂的日期约会问题。 我需要更改同一ID的date_1列和date_2列的日期。 我想根据条件将date_2的日期复制到下一行的date_1的日期。而我要做的就是为每个ID(即按ID分区)
注意:数据按ID升序,日期_1升序,日期_2升序排序。
例如: 考虑第二行,date_1日期为“ 2019-05-01”,现在看到其上一行具有相同ID 1的日期,此处date_2日期为“ 2019-06-30”。 因此,检查任何一行的前一行的IF date_2值是否大于当前行的date_1的值,如果ID为第二行则为true。 如果为true,则将第二行的date_1值替换为上一行的date_2值。 即将2019-05-01更改为2019-06-30,否则请保持原样。对于第三行也是如此,依此类推。 当考虑第三行时,则寻找其前一行第二行。其他行也是如此。 考虑ID 2的第二行。 这里2019-02-28不大于2019-03-01,所以请保持原样。
Expected Output :
date_1 date_2 ID
2019-01-01 2019-06-30 1
2019-06-30 2019-05-31 1
2019-06-01 2019-07-30 1
2019-01-02 2019-02-28 2
2019-03-01 2019-08-30 2
2019-01-02 2019-02-28 3
2019-02-28 2019-08-30 3
答案 0 :(得分:0)
我认为您想要lag()
这样
select date_add(lag(date2, 1, date1) over (partition by id order by date1), 1) as date1,
date2,
id
from t;