首页 > 解决方案 > 计算SQL中的行之间花费的时间

问题描述

我是 SQL 新手,因此是这个问题。我有下表。

id | prev_state | curr_state | start_curr_state |selected_to_interview|interview_to_selected|
1  | APPLICANT. | INTERVIEW  | 2020-10-12.      | ?                   |
2  | NULL       | APPLICANT. | 2020-10-16       | NULL                | NULL.               |
1  | INTERVIEW. | SELECTED.  | 2020-1--20.      | NULL                | ?                   |

我有一组 3 个预先确定的候选状态 - APPLICANT, INTERVIEW& SELECTED。该表提供了从一个阶段过渡到另一个阶段的候选人的记录。start_curr_state 是当前状态的开始日期 - 采访状态的第 1 行开始。根据转换的状态,我需要计算每个阶段转换所需的时间。

start_curr_state我知道时间是日期差异prev_state-start_curr_state 但我不确定如何计算。任何帮助表示赞赏。

标签: sqlhiveapache-spark-sql

解决方案


您可以使用LAG(),我假设您对每个人都有一个名为“candidateid”的密钥:

select t1.* 
, CASE WHEN t1.curr_state = 'INTERVIEW' AND prev_state = 'APPLICANT' 
THEN datediff( lag(t1.start_curr_state) over (partition by t1.candidateid order by t1.start_curr_state) ,t1.start_curr_state) 
ELSE NULL END  selected_to_interview
from tablename t1 


推荐阅读