2015-11-04 80 views
0

我有一個SQL表,其中包含來自以下各項的填充數據行:衝入次數,任務在一天中完成,然後衝出時間。我需要拿出一個PHP MSSQL查詢來獲取每行之間的流逝時間。最好使用DATEDIFF(second, [Date Completed], [Date Completed])/3600.0 AS DiffDatePHP MSSQL DateDiff之間日期在下一個結果中完成

如何從第一個結果中保留Date Completed以便我可以在下一個結果中使用它來獲取兩個日期之間的經過時間?

我的查詢如下所示:

SELECT PDT_Mill_Capacity_Labor_Detail.[id], 
    users.alias, 
    PDT_Mill_Capacity_Labor_Detail.[Order Number], 
    PDT_Mill_Capacity_Labor_Detail.[Job Name], 
    PDT_Mill_Capacity_Labor_Detail.[Door Number], 
    PDT_Mill_Capacity_Labor_Detail.[Qty Display], 
    PDT_Mill_Capacity_Labor_Detail.[Door Counter], 
    PDT_Mill_Capacity_Labor_Detail.[Jamb Counter], 
    PDT_Mill_Capacity_Labor_Detail.[Work Center], 
    PDT_Mill_Capacity_Labor_Detail.[Completed By], 
    PDT_Mill_Capacity_Labor_Detail.[Date Completed], 
    PDT_Mill_Capacity_Labor_Detail.[Hours Earned], 
    PDT_Mill_Capacity_Labor_Detail.[Elapsed Time], 
    PDT_Mill_Capacity_Labor_Detail.[Applied Time], 
    PDT_Mill_Capacity_Labor_Detail.[ID] 

FROM users INNER JOIN PDT_Mill_Capacity_Labor_Detail 
    ON users.[Employee Number] = PDT_Mill_Capacity_Labor_Detail.[Completed By] 

WHERE [Completed By]='081' 
    AND ([Date Completed] >= '10/21/2015 00:00:00' 
    AND [Date Completed] <= '10/21/2015 23:59:59') 

GROUP BY 
    PDT_Mill_Capacity_Labor_Detail.[id], users.alias, 
    PDT_Mill_Capacity_Labor_Detail.[Order Number], 
    PDT_Mill_Capacity_Labor_Detail.[Job Name], 
    PDT_Mill_Capacity_Labor_Detail.[Door Number], 
    PDT_Mill_Capacity_Labor_Detail.[Qty Display], 
    PDT_Mill_Capacity_Labor_Detail.[Door Counter], 
    PDT_Mill_Capacity_Labor_Detail.[Jamb Counter], 
    PDT_Mill_Capacity_Labor_Detail.[Work Center], 
    PDT_Mill_Capacity_Labor_Detail.[Completed By], 
    PDT_Mill_Capacity_Labor_Detail.[Date Completed], 
    PDT_Mill_Capacity_Labor_Detail.[Hours Earned], 
    PDT_Mill_Capacity_Labor_Detail.[Elapsed Time], 
    PDT_Mill_Capacity_Labor_Detail.[Applied Time], 
    PDT_Mill_Capacity_Labor_Detail.[ID] 

ORDER BY [Completed By], [Date Completed] 

結果如下所示...

Work Station | Date Completed   | Elapsed Time | ID 
--------------------------------------------------------------- 
Punched In | 2015-10-21 05:58:00.000 |  0  | 6816 

Task1   | 2015-10-21 11:27:11.000 |  0  | 6212 

Task2   | 2015-10-21 11:27:33.000 |  0  | 6219 

Task3   | 2015-10-21 11:28:22.000 |  0  | 6651 

Punched Out | 2015-10-21 14:42:00.000 |  0  | 7318 
+0

謝謝你的edi但是如果沒有2K的聲望,它不會讓我批准它。 –

回答

0

後一個體面的睡眠,我設法重寫的過程中,計算所經過的時間在每個任務之間使用以下查詢並設法得到所需結果...

SELECT b.[id], a.[Completed By], 
a.[Date Completed] AS newDateCompleted, 
b.[Date Completed] AS oldDateCompleted, 
DATEDIFF(second, a.[Date Completed],b.[Date Completed])/3600.0 AS diff 
FROM(
    SELECT id, [Completed By], [Date Completed], 
     (
      SELECT count(*) 
      FROM PDT_Mill_Capacity_Labor_Detail 
      WHERE [Completed By]=T.[Completed By] AND [Date Completed]<T.[Date Completed] 
     )+1 
    AS rank1 
    FROM PDT_Mill_Capacity_Labor_Detail 
    AS T 
    ) 
AS a INNER JOIN 
    (
     SELECT id, [Completed By], [Date Completed], 
     (
      SELECT count(*) 
      FROM PDT_Mill_Capacity_Labor_Detail 
      WHERE [Completed By]=T1.[Completed By] AND [Date Completed]<T1.[Date Completed] 
     ) 
     AS rank2 
     FROM PDT_Mill_Capacity_Labor_Detail 
     AS T1 
    ) 
AS b ON (a.rank1=b.rank2) AND (a.[Completed By] = b.[Completed By]) 

WHERE a.[Completed By]='084' AND (a.[Date Completed] >='11/4/2015' AND a.[Date Completed] <='11/4/2015 23:59:59') 

ORDER BY a.[Completed By], a.[Date Completed] ASC