我想创建一个虚拟打卡机,员工可以在其中打卡并打卡。自从我触及T-SQL
以来已经有一段时间了,而且一些概念在我的记忆中迷失了方向。
我用打孔信息创建了一个表
CREATE TABLE Punchs
(
id INT PRIMARY KEY NOT NULL IDENTITY,
idEmployee INT NOT NULL,
punchIn DATETIME NOT NULL,
punchOut DATETIME,
FOREIGN KEY (idEmployee) REFERENCES Employees(id)
)
我将一些错误信息作为员工帐号的id
的ID,idEmployee
的员工帐号punchIn
,以及员工为工作而打的时间{员工退出时的{1}}。
我想制作一个程序,知道它是否需要打入或打出。
我有一个规范
到目前为止我有什么
punchOut
答案 0 :(得分:1)
我已编辑了您的程序,请参阅有关更改的内嵌评论
$ keytool -exportcert -alias androiddebugkey -keystore ~/YOUR/PATH/TO/KEYSTORE -list -v
答案 1 :(得分:1)
这是一个使用MERGE的解决方案。检查委托人是一样的。
;
WITH
active AS
(
SELECT id, e.idEmployee, punchIn
FROM Employee e
LEFT JOIN Punchs p ON e.idEmployee = p.idEmployee
AND p.punchOut is null
WHERE e.idEmployee = @idEmployee
)
MERGE Punchs AS t
USING
(
select id, idEmployee
from active
UNION ALL
-- this is to handle the condition "If the day is a new day, start a new punch"
SELECT id = NULL, idEmployee
FROM active
WHERE convert(date, punchIn) <> convert(date, getdate())
) AS s
ON s.id = t.id
WHEN NOT MATCHED BY TARGET
THEN
INSERT (idEmployee, punchIn)
VALUES (@idEmployee, getdate())
WHEN MATCHED
THEN
UPDATE SET
punchOut = getdate();