根据条件使用滞后更改日期

时间:2019-08-28 22:13:59

标签: sql hive

输入表:

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

1 个答案:

答案 0 :(得分:0)

我认为您想要lag()这样

select date_add(lag(date2, 1, date1) over (partition by id order by date1), 1) as date1,
       date2,
       id
from t;