我正在寻找一个查询,可以找到所有没有注销登录的条目。
我的数据看起来像这样
Key Date Employee
LOGIN 20171225 111
LOGIN 20171225 111
LOGIN 20171226 111
There should be a record here. I need to catch that.
LOGIN 20171227 111
LOGIN 20171227 111
12345 20171227 222(表中还有很多其他随机数据。)
Select Date, Employee
From My Table
Where Key = 'LOGIN'
Group by date, employee
Order by employee
我不知道如何过滤掉当天是否有一次或两次登录。我需要看看哪里只有一个,因为这表明他们还没有退出。这不是给我正确的信息。
谢谢。
答案 0 :(得分:0)
您可以使用此
DECLARE @dummyTbl TABLE([Key] VARCHAR(100),[Date] DATE,Employee INT);
INSERT INTO @dummyTbl VALUES
('LOGIN','20171225',111)
,('LOGIN','20171225',111)
,('LOGIN','20171226',111)
,('LOGIN','20171227',111)
,('LOGIN','20171227',111);
SELECT *
FROM @dummyTbl
GROUP BY [Key],[Date],Employee
HAVING COUNT(*)=1
但我想知道,为什么你的Key
LOGIN 两种情况,为什么不使用 LOGOUT ?
答案 1 :(得分:0)
如果您的密钥始终是LogIn,那么您真的想要查找任何ODD条目数。你可以通过使用除以2的余数(%)不等于0来做。
Array.prototype.map.call(document.querySelectorAll(...), function(...){...});
如果您有多个密钥登录/注销并且您正在尝试确定用户是否已注销,那么最好查看当天用户的最后一个值,如果它没有注销,那么您知道他们仍然登录。
DECLARE @dummyTbl TABLE([Key] VARCHAR(100),[Date] DATE,Employee INT);
INSERT INTO @dummyTbl VALUES
('LOGIN','20171225',111)
,('LOGIN','20171225',111)
,('LOGIN','20171226',111)
,('LOGIN','20171227',111)
,('LOGIN','20171227',111);
SELECT *
FROM @dummyTbl
GROUP BY [Key],[Date],Employee
HAVING COUNT(*) % 2 <> 0
如果您可能有脏数据(缺少登录或注销记录),那么您将需要做出一些业务决策会变得更复杂,但最后一种记录方法仍然是一种可行的方法。如果您的员工可以在午夜时分工作而无需退出,那么它也会变得更加复杂......