如果没有信息,如何从下一行获取信息并填充?

d8tt03nd  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(408)

所以我有下表:

  1. Id Billing_Date
  2. A00 2020-01-01
  3. A00 2020-02-01
  4. A00 2020-04-01
  5. B91 2020-01-01
  6. B91 2020-03-01
  7. B91 2020-04-01
  8. C11 2020-01-01

我想做的是从下一行得到日期,如果我找不到这个日期,那么我将填写帐单日期+60天。当然都是基于身份证。我的数据最终应该是这样的:

  1. Id Billing_Date Billing_Date_Duo
  2. A00 2020-01-01 2020-02-01
  3. A00 2020-02-01 2020-04-01
  4. A00 2020-04-01 2020-06-01
  5. B91 2020-01-01 2020-03-01
  6. B91 2020-03-01 2020-04-01
  7. B91 2020-04-01 2020-06-01
  8. C11 2020-01-01 2020-03-01

我该怎么做?我知道我应该使用像lead()这样的东西,但不知道如何在这里这样做,以及如何结合case when。
我以为这样行得通,但没有:

  1. select Id, Billing_Date,
  2. lead(Billing_Date) over (order by Id) as Billing_Date_Duo
zbq4xfa0

zbq4xfa01#

你可以用 lead() 在正确的分区上( id )以及 order by ,和 coalesce() 要指定默认值:

  1. select
  2. id,
  3. billing_date,
  4. coalesce(
  5. lead(billing_date) over(partition by id order by billing_date),
  6. billing_date + interval '60 day'
  7. ) billing_date_duo
  8. from mytable

你可以用3形式的参数 lag() :

  1. select
  2. id,
  3. billing_date,
  4. lead(billing_date, 1, (billing_date + interval '60 day')::date)
  5. over(partition by id order by billing_date) billing_date_duo
  6. from mytable

db小提琴演示

展开查看全部

相关问题