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