按员工在SQL Server 2008上按时间计算IN / OUT

时间:2016-03-18 14:37:59

标签: sql-server

我的问题很简单。

我有这张桌子,每当员工在时钟上使用他的时间卡时就会保存一行:

EmployeeID      DateTime
----------      --------------------
1               2016-02-16 07:00 am
1               2016-02-16 06:30 pm
1               2016-02-17 07:15 am
2               2016-02-17 09:00 am
1               2016-02-17 11:30 am
1               2016-02-17 01:45 pm
1               2016-02-17 06:45 pm
2               2016-02-17 06:45 pm

我需要的是计算一个列,用于确定IN或OUT办公室的员工。为此,我估计每个员工每天的第一条记录是IN,下一个OUT,下一个IN等等。

因此给定示例的结果应为:

EmployeeID      DateTime                INOUT
----------      --------------------    -----
1               2016-02-16 07:00 am     IN
1               2016-02-16 06:30 pm     OUT
1               2016-02-17 07:15 am     IN
2               2016-02-17 09:00 am     IN
1               2016-02-17 11:30 am     OUT
1               2016-02-17 01:45 pm     IN
1               2016-02-17 06:45 pm     OUT
2               2016-02-17 06:45 pm     OUT

我想我需要加入以前的每条记录,然后计算但不知道如何。

由于

1 个答案:

答案 0 :(得分:6)

您可以使用ROW_NUMBER,无需自己加入表格:

WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY [DateTime])
    FROM dbo.YourTable
)
SELECT  *,
        CASE WHEN RN % 2 = 1 THEN 'IN' ELSE 'OUT' END INOUT
FROM CTE;