首页 > 解决方案 > 如何查找每次状态更改之间的天数

问题描述

我在 Postgres 中有一个名为 Application 的表:

ID    JA_ID    TO_STATUS      FROM_STATUS      DATE
1      100     Matched        NULL             2019-05-06
2      100     INterview      Matched          2019-05-30
3      100     Extended       INterview        2019-05-31
4      200     New_Applicant  NULL             2020-04-01
5      200     INterview      New_applicant    2020-04-05
6      200     Rejected       interview        2020-05-10

现在我需要计算此表中每个 JA_ID 的每个状态更改之间的天数。我已经对基于 JA_ID 和 DAte(在 asc 中)的状态更改进行了排序。我的 O/P 'DAYS'列应该是这样的:

ID    JA_ID    TO_STATUS      FROM_STATUS      DATE           DAYS
1      100     Matched        NULL             2019-05-06     NULL
2      100     Interview      Matched          2019-05-30     24
3      100     Extended       INterview        2019-05-31.    1
4      200     New_Applicant  NULL             2020-04-01.    NULL
5      200     Interview      New_applicant    2020-04-05.    4
6      200     Rejected       interview        2020-05-10.    5

标签: sqlpostgresqldate

解决方案


假设“日期”是用数据类型定义的date(应该是这样),您可以使用它lag()来获取上一个日期并减去这些值:

select id, ja_id, to_status, from_status, "date", 
       "date" - lag("date") over (partition by ja_id order by "date") as days
from application;

推荐阅读