如何为每个用户SQL获取第一个时钟输出时间和第二个时钟

时间:2013-12-20 19:18:01

标签: sql sql-server tsql sql-server-2005

我有一个查询,我试图让用户休息时间。我想我可以使用第一个打卡时间,第二个打卡时间,并使用日期差异来突破每个员工。然而,它正在做的是抓住FIRST打出午餐,最后用户打出一天。如何让员工列出每个员工的休息时间。以下是我的询问:

SELECT lEmployeeID,
       DATEDIFF(mi, MIN(dtTimeOut), MAX(dtTimeIn)) AS Break_Time
FROM dbo.fTimeCard(@StartDate, @EndDate, @DeptList, @iActive, @EmployeeList) AS ftc
WHERE (TotalHours >= 0)
AND   (DID IS NOT NULL)
OR    (DID IS NOT NULL)
AND   (dtTimeOut IS NULL)
GROUP BY lEmployeeID

1 个答案:

答案 0 :(得分:2)

这远远不是最有效的方法,但是通过我自己的一些测试数据,我能够使用一系列日期数据获得每次休息的分钟数 - 如果范围有用,这将会中断日期在一天的范围内。希望这可能会激励某人想出一个更好的方法......

输出: 三十 60

DECLARE @test TABLE(num INT PRIMARY KEY, activity DATETIME);

INSERT INTO @test(num, activity)
VALUES(77, '2014-01-10 08:00:00'),
(34, '2014-01-10 12:00:00'), (1000, '2014-01-10 12:30:00'), (1, '2014-01-10 18:00:00')
, (34345, '2014-01-10 14:00:00'), (2334, '2014-01-10 15:00:00');


SELECT 
    DATEDIFF(MINUTE, Ordered.activity, offs.offActivity)
FROM 
(
    SELECT
        activity
    FROM
    (
        SELECT 
            ROW_NUMBER() OVER(ORDER BY activity) AS Iteration, num, activity 
        FROM 
            @test As iD1
    ) AS Rowed
    WHERE
        Rowed.iteration % 2 = 0
) AS Ordered
    CROSS APPLY
(
    SELECT TOP 1
        activity as offActivity
    FROM
        @test iD
    WHERE
        iD.activity > Ordered.activity
    ORDER BY 
        activity
) As Offs