【发布时间】:2019-09-30 12:33:03
【问题描述】:
我有一个存储员工签入和签出的表格。现在数据存储在 2 个不同的列和 2 行中,如下所示。如果员工在2019-09-01 21:30:00 签到并在2019-09-02 08:45:00 签出,则显示总小时数为负数。
这是数据:
DROP TABLE TestAtte;
CREATE TABLE TestAtte(
ID INT,
TimeIn DATETIME,
TimeOut DATETIME
);
INSERT INTO TestAtte VALUES(1, '2019-09-01 21:30:00', NULL);
INSERT INTO TestAtte VALUES(2, NULL, '2019-09-02 08:48:00');
INSERT INTO TestAtte VALUES(3, '2019-09-03 17:16:00', NULL);
INSERT INTO TestAtte VALUES(4, NULL, '2019-09-04 09:14:00');
我的查询是这样的
SELECT MIN(TimeIn) Checkin, MAX(Timeout) CheckOut
FROM dbo.TestAtte
GROUP BY CAST(COALESCE(TimeIn, Timeout) AS DATE)
数据应该是这样的
TimeIn TimeOut
2019-09-01 21:30:00.000 2019-09-02 08:48:00.000
2019-09-03 17:16:00.000 2019-09-04 09:14:00.000
【问题讨论】:
-
如何判断连续记录属于同一员工?
标签: sql-server tsql datetime