取时间差之和和列的最后一个值
Posted
技术标签:
【中文标题】取时间差之和和列的最后一个值【英文标题】:Take Sum of time difference and Last value of a column 【发布时间】:2020-10-14 06:45:58 【问题描述】:我有一张表,我们在其中存储任务的StartTime
和StopTime
。一项任务可以分配给多个技术人员。一项任务可以有多个开始时间、停止时间(所以多行,这里 Doc Num 是主 ID)。
我想根据任务 ID 和技术人员 ID 计算开始时间和停止时间之间的差异总和。
我还需要获取最后一行的状态来确定每个技术员的当前任务状态。我尝试了以下查询。但它没有用。
SELECT T1.TaskId, SUM(DATEDIFF(second, T1.StartTime,T1.StopTime)) as TaskDuration
, T3.TechnicianId, T3.FinalStatus
FROM Tbl_TaskTracking T1
INNER JOIN (
SELECT DISTINCT T2.TaskId, T2.technicianId
, first_Value(T2.Status) OVER (PARTITION BY T2.TASKID, T2.technicianId ORDER BY T2.TASKID, T2.technicianId, T2.docnum desc) AS FinalStatus
FROM Tbl_TaskTracking T2
) AS T3 ON T1.TaskId = T3.TaskId
WHERE T1.TaskId = '2001628'
GROUP BY T1.TaskId, T3.TechnicianId, T3.FinalStatus
我的表格数据如下所示。此行显示特定任务 ID 的数据。
【问题讨论】:
【参考方案1】:您只是在 join on
子句中缺少以下内容:
AND T1.TechnicianId = T3.TechnicianId
是这样的:
SELECT T1.TaskId
,SUM(DATEDIFF(second, T1.StartTime,T1.StopTime)) as TaskDuration
,T3.TechnicianId
,T3.FinalStatus
FROM Tbl_TaskTracking T1
INNER JOIN
(
SELECT DISTINCT T2.TaskId
,T2.technicianId
,first_Value(T2.Status) OVER (PARTITION BY T2.TASKID,T2.technicianId ORDER BY T2.TASKID,T2.technicianId,T2.docnum desc) AS FinalStatus
FROM Tbl_TaskTracking T2
) AS T3
ON T1.TaskId = T3.TaskId
AND T1.TechnicianId = T3.TechnicianId
WHERE T1.TaskId = '2001628'
GROUP BY T1.TaskId
,T3.TechnicianId
,T3.FinalStatus
【讨论】:
以上是关于取时间差之和和列的最后一个值的主要内容,如果未能解决你的问题,请参考以下文章
剑指Offer(Java版)第十二题:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左右上下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。 如