Sql 日期列表-查找日期之间的账龄

Sql 日期列表-查找日期之间的账龄,sql,salesforce,amazon-redshift,Sql,Salesforce,Amazon Redshift,我正在编写一个查询,从salesforce的case_history表中检索老化数据。由于案例由团队处理,案例将经历不同的阶段,如新建、工作、质量检查,请更正并关闭 Case_id | Edit_Date | Field | Old_Value | New_Value -------------------------------------------------------------------------------------

我正在编写一个查询,从salesforce的case_history表中检索老化数据。由于案例由团队处理,案例将经历不同的阶段,如新建、工作、质量检查,请更正并关闭

Case_id  |  Edit_Date           |   Field  |    Old_Value      |    New_Value    
---------------------------------------------------------------------------------------------------
xvywiqhn |  2019-12-12 08:05:59 |   Status |    Quality Check  |    Closed
xvywiqhn |  2019-12-12 07:21:55 |   Status |    Please Correct |    Quality Check
xvywiqhn |  2019-12-09 08:32:40 |   Status |    Quality Check  |    Please Correct
xvywiqhn |  2019-12-09 08:08:49 |   Status |    Working        |    Quality Check
xvywiqhn |  2019-12-09 07:35:24 |   Status |    New            |    Working 
我试图以这样一种方式创建列,即我获得下一个日期和新的_值,以便我能够获得该阶段的年龄

Case_id  |  Edit_Date           | Old_Value      | New_Value      | Completion_Date     | End_Stage      
--------------------------------------------------------------------------------------------------------
xvywiqhn |  2019-12-12 08:05:59 | Quality Check  | Closed         | NULL                | NULL 
xvywiqhn |  2019-12-12 07:21:55 | Please Correct | Quality Check  | 2019-12-12 08:05:59 | Closed
xvywiqhn |  2019-12-09 08:32:40 | Quality Check  | Please Correct | 2019-12-12 07:21:55 | Quality Check
xvywiqhn |  2019-12-09 08:08:49 | Working        | Quality Check  | 2019-12-09 08:32:40 | Please Correct
xvywiqhn |  2019-12-09 07:35:24 | New            | Working        | 2019-12-09 08:08:49 | Quality Check
我有办法做到这一点吗

SELECT
    case_id,
    edit_date,
    old_value,
    new_value,
    "getting next edit_date",
    "getting new_value for next edit_date"
FROM case_history
我们可以在此处尝试使用滞后函数:

SELECT
    case_id,
    edit_date,
    old_value,
    new_value,
    LAG(edit_date) OVER (PARTITION BY case_id ORDER BY edit_date) completion_date,
    LAG(new_value) OVER (PARTITION BY case_id ORDER BY edit_date) end_stage
FROM case_history
ORDER BY
    case_id,
    edit_date;

我想我知道怎么做了

SELECT
    case_id,
    edit_date,
    old_value,
    new_value,
    first_value(edit_date) over (partition by case_id order by edit_date rows BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) Completion_Date,
    first_value(new_value) over (partition by case_id order by edit_date rows BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) End_Stage
FROM case_history

非常感谢。这给了我另一个想法。如果我使用LEAD,我可以得到我需要的结果,而不是LAG。我不知道是否需要包含完整的中间窗口,但即使不需要,我可能会保持简单,在这里使用LAG/LEAD。