计算SQL中的行之间花费的时间

Posted

技术标签:

【中文标题】计算SQL中的行之间花费的时间【英文标题】:Calculating time taken between rows in SQL 【发布时间】:2021-02-03 00:52:13 【问题描述】:

我是 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 个预先确定的候选状态 - APPLICANTINTERVIEWSELECTED。 该表提供了从一个阶段过渡到另一个阶段的候选人的记录。 start_curr_state 是当前状态的开始日期 - 采访状态的第 1 行开始。 根据转换的状态,我需要计算每个阶段转换所需的时间。

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

【问题讨论】:

请标记数据库平台 @OldProgrammer 已更新 你需要展示你的最终答案应该是什么样子,这样很明显你的问题是完整的。从表面上看,一个简单的带有窗口函数的递归 CTE 就可以做到,但不知道输出是什么,无法为您提供明确的 sql。 【参考方案1】:

你可以使用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 

【讨论】:

如果您可以在 switch case 中为特定情况(如 slected_to_interview)编写此代码,这将非常有帮助。我是 SQL 新手,但我仍在努力思考这项新的学习。 @TannishaHill 'slected_to_interview' 怎么样。请解释整个逻辑(可能在您的问题中提供示例。 我的意思是逻辑类似于existing_table.withColumn("applicant_to_interview", when($"prev_state" === "APPLICANT" && $"curr_state" === "INTERVIEW, <this_lag_logic>).otherwise(0) 没有连接,APPLICANT 和 INTERVIEW 是当前状态在同一个表中的不同行。 是的,我看了你的评论后修好了【参考方案2】:

您有两个问题:第一个是在您的数据库中执行“datediff”。这是一个简单的问题 第二个是善用Windows Function的经典问题: 具体来说就是LAG windows函数的使用。

从代码中看这个例子(在提到的链接中):

SELECT id, --assumes it's the applicant id
START_CURR_STATE,
       CURR_STATE,
       START_CURR_STATE-LAG(START_CURR_STATE, 1) OVER
         (PARTITION BY id ORDER BY CURR_STATE)
         AS difference
  FROM TABLE

(假代码)

请注意:由于您的 CURR_STATE 可以按字母顺序正确排序,因此有效! 另外,有时你可以做 DATE-DATE,有时你需要使用诸如 (DATEDIFF) 之类的函数。这取决于您的 SQL 平台,因此您需要查找它

【讨论】:

以上是关于计算SQL中的行之间花费的时间的主要内容,如果未能解决你的问题,请参考以下文章

计算 SQL 中值转换之间的行数

SQL 计算表中的行数

正确计算确切编号的方法。使用 PHP PDO 的 SQL 中的行数

如何计算sql中where语句中的行数?

计算Sql中的行数

计算列组中的列数