Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何为每个用户获取第一个时钟输出时间和第二个时钟输入时间_Sql_Sql Server_Tsql_Sql Server 2005 - Fatal编程技术网

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

Sql 如何为每个用户获取第一个时钟输出时间和第二个时钟输入时间,sql,sql-server,tsql,sql-server-2005,Sql,Sql Server,Tsql,Sql Server 2005,我有一个问题,我正试图得到一个用户休息时间。我想我可以用第一个打卡时间和第二个打卡时间,然后用日期差来为每个员工打卡。然而,它所做的是抓取第一个打卡吃饭的用户,以及最后一个打卡上班的用户。我如何让它按员工列出每个员工的休息时间。以下是我的疑问: SELECT lEmployeeID, DATEDIFF(mi, MIN(dtTimeOut), MAX(dtTimeIn)) AS Break_Time FROM dbo.fTimeCard(@StartDate, @EndDate, @

我有一个问题,我正试图得到一个用户休息时间。我想我可以用第一个打卡时间和第二个打卡时间,然后用日期差来为每个员工打卡。然而,它所做的是抓取第一个打卡吃饭的用户,以及最后一个打卡上班的用户。我如何让它按员工列出每个员工的休息时间。以下是我的疑问:

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

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

输出: 30 六十


真正有用的答案取决于有关数据库模式的更多信息。一行包含什么?您是想为所有用户获取休息时间,还是只为一个用户获取休息时间?您是否需要查看“今天”或过去某个日期或某个日期范围的休息时间?假定休息时间是一天中发生的时钟输入/输出,因此您需要确定哪个时钟输入/输出代表实际的上午到达/下午离开,不包括这些特定事件,然后用一天中其余的入/出事件作为休息。我使用的是日期范围。所有用户的休息时间。用户输入和输出时的dttimein和dttimeout house。所以我8点打卡12点打卡1230点打卡5点打卡。我工作了8.5个小时,休息了30分钟假设一名员工只休息一次,您的查询应该只针对每位员工。您需要按employeeId和date(日期)分组,以获得每天的结果。另外,将日期时间转换为24小时。在执行datefiff之前格式化-DATEDIFF(mi,MIN(convert(datetime,dtTimeOut,9)),MAX(convert(datetime,dtTimeIn,9)))我认为我们需要查看表值函数,以及它返回的示例。
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