【问题标题】: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 的数据。

【问题讨论】:

    标签: sql sql-server tsql window-functions


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多