我有一个查询,我试图让用户休息时间。我想我可以使用第一个打卡时间,第二个打卡时间,并使用日期差异来突破每个员工。然而,它正在做的是抓住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
答案 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