PHP MSSQL DateDiff日期在下一个结果中完成

时间:2015-11-04 20:45:47

标签: php sql sql-server datediff

我有一个SQL表,其中包含多行填充数据:按时打孔,白天完成任务,然后打出时间。我需要提出一个PHP MSSQL查询来获取每行之间的经过时间。最好使用curl -X "GET" "http://127.0.0.1:2375/images/json" curl -X "GET" "http://192.168.99.100:2375/images/json" (on OSX)

如何让它保留第一个结果中的DATEDIFF(second, [Date Completed], [Date Completed]) / 3600.0 AS DiffDate,以便我可以在下一个结果中使用它,以获得两个日期之间的经过时间?

我的查询如下所示:

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]

1 个答案:

答案 0 :(得分: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