我目前有一个数据表,显示流程中的不同步骤,并执行每个步骤的日期/时间。
我要做的是添加一个列,计算每个步骤之间的分钟时间,但是它必须与claimID相关,因此在显示的图像中,我将寻找每个步骤之间的差异前4个结果(因为它们共享相同的claimID),然后是以下6个结果,等等。
有人可以帮忙吗?我使用的是SQL Server
答案 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