查找日期条目的匹配项

时间:2017-12-28 23:26:32

标签: sql sql-server-2008 ssms

我正在寻找一个查询,可以找到所有没有注销登录的条目。

我的数据看起来像这样

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

我不知道如何过滤掉当天是否有一次或两次登录。我需要看看哪里只有一个,因为这表明他们还没有退出。这不是给我正确的信息。

谢谢。

2 个答案:

答案 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

如果您可能有脏数据(缺少登录或注销记录),那么您将需要做出一些业务决策会变得更复杂,但最后一种记录方法仍然是一种可行的方法。如果您的员工可以在午夜时分工作而无需退出,那么它也会变得更加复杂......

相关问题