基于另一列的2个日期之间的持续时间

时间:2015-12-07 16:04:49

标签: sql sql-server

我目前有一个数据表,显示流程中的不同步骤,并执行每个步骤的日期/时间。

enter image description here

我要做的是添加一个列,计算每个步骤之间的分钟时间,但是它必须与claimID相关,因此在显示的图像中,我将寻找每个步骤之间的差异前4个结果(因为它们共享相同的claimID),然后是以下6个结果,等等。

有人可以帮忙吗?我使用的是SQL Server

2 个答案:

答案 0 :(得分:1)

根据您使用的SQL Server版本,您可以使用自联接或lag窗口功能(这应该适用于SQL Server 2012 +):

select 
    claimid
    , statusid
    , statussetdate
    , coalesce(datediff(minute, 
               lag(statussetdate) over (partition by claimid order by statussetdate), 
               statussetdate
              ),0) as diff_in_minutes
from 
    your_table
order by 
    ClaimID
    , StatusSetDate;

答案 1 :(得分:0)

您可以使用Row_number自动将表连接到自身以获取上一个日期并对2个值执行DateDiff ..

;WITH cte AS 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ClaimID ORDER BY StatusSetDate) Rn
    FROM ClaimStatus
)
SELECT  curr.*, 
        ISNULL(DATEDIFF(minute, prev.StatusSetDate, curr.StatusSetDate),0)
FROM    cte curr
        LEFT JOIN cte prev ON curr.ClaimID = prev.ClaimID AND curr.Rn = prev.Rn + 1
ORDER BY curr.ClaimID, curr.StatusSetDate