取时间差之和和列的最后一个值

Posted

技术标签:

【中文标题】取时间差之和和列的最后一个值【英文标题】:Take Sum of time difference and Last value of a column 【发布时间】:2020-10-14 06:45:58 【问题描述】:

我有一张表,我们在其中存储任务的StartTimeStopTime。一项任务可以分配给多个技术人员。一项任务可以有多个开始时间、停止时间(所以多行,这里 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

【讨论】:

以上是关于取时间差之和和列的最后一个值的主要内容,如果未能解决你的问题,请参考以下文章

03:计算矩阵边缘元素之和

打印 2 个数组的行和列的总和

问题 C: 计算矩阵边缘元素之和

检查给定行和列总和是不是只有 2 行的二进制矩阵

剑指Offer(Java版)第十二题:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左右上下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。 如

将带有html标签的列值转换为带有行和列的sql视图