Wenn Ihr Schlüssel immer LogIn ist, dann sollten Sie wirklich nach einer ODD-Anzahl von Einträgen suchen. Welche können Sie mithilfe Rest (%) der Division durch 2 nicht gleich 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(*) % 2 <> 0
tun Wenn Sie mehrere Schlüssel Login/Logout haben und Sie versuchen, herauszufinden, ob der Benutzer abgemeldet wird es dann am besten auf dem letzten Wert für den Benutzer für den Tag zu sehen und wenn es nicht so ist abzumelden Sie wissen, dass sie in noch angemeldet sind.
DECLARE @dummyTbl TABLE(Id INT IDENTITY(1,1), [Key] VARCHAR(100),[Date] DATE,Employee INT);
INSERT INTO @dummyTbl VALUES
('LOGIN','20171225',111)
,('LOGIN','20171225',111)
,('LOGOUT','20171225',111)
,('LOGIN','20171226',111)
,('LOGIN','20171227',111)
,('LOGOUT','20171227',111);
;WITH cteRowNum AS (
SELECT *
,LastDailyActivityRowNum = ROW_NUMBER() OVER (PARTITION BY Date, Employee ORDER BY Id DESC)
FROM
@dummyTbl
)
SELECT *
FROM
cteRowNum
WHERE
LastDailyActivityRowNum = 1
AND [Key] = 'LOGIN'
wenn Sie möglicherweise unsauberen Daten haben (fehlende Anmeldung oder Aufzeichnung abzumelden) dann wird ein bisschen komplizierter, wo Sie einige geschäftliche Entscheidungen treffen müssen, aber die letzte Record-Methode ist immer noch der Weg zu gehen. Wenn Sie Mitarbeiter haben, die nach Mitternacht arbeiten können, ohne sich abzumelden, wird es auch etwas komplizierter.
Vielen Dank. Ich werde es ausprobieren. Um deine Frage zu beantworten, habe ich keine Ahnung! Ich habe es nicht geschrieben, und ich kann es nicht ändern. Es ist Software, die das Unternehmen vor langer Zeit gekauft hat. –
@CNL In Ordnung, manchmal müssen wir essen, was andere gekocht haben :-D Du musst einen Filter für '[Key] = 'LOGIN'' zu meiner Lösung hinzufügen ... – Shnugo
Danke. Das funktioniert. Ich hatte noch keine Gelegenheit, die anderen Poster anzuschauen, aber ich werde und upvote, wenn ich kann. Ich habe deine Antwort als richtig markiert. Danke noch einmal. –