略有不同;您可以找到每一行的上一个日期,还可以根据日期顺序分配排名:
select id, submitted_date,
lag(submitted_date) over (partition by id order by submitted_date) as previous_date,
dense_rank() over (partition by id order by submitted_date desc) as rnk
from your_table;
ID SUBMITTED_DATE PREVIOUS_DATE RNK
----- -------------- ------------- ----------
00001 2017-03-17 3
00001 2018-07-20 2017-03-17 2
00001 2019-06-20 2018-07-20 1
00002 2018-07-20 3
00002 2018-08-22 2018-07-20 2
00002 2019-04-23 2018-08-22 1
然后将其用作内联视图以仅获取最新日期 - 排名第一:
select id, submitted_date, previous_date,
submitted_date - previous_date as diff
from
(
select id, submitted_date,
lag(submitted_date) over (partition by id order by submitted_date) as previous_date,
dense_rank() over (partition by id order by submitted_date desc) as rnk
from your_table
)
where rnk = 1;
ID SUBMITTED_DATE PREVIOUS_DATE DIFF
----- -------------- ------------- ----------
00001 2019-06-20 2018-07-20 335
00002 2019-04-23 2018-08-22 244