키가 항상 LogIn이면 항목의 ODD 번호를 실제로 찾고 싶습니다. 당신은으로 나누기의 나머지 (%)를 사용하여 어떤 할 수있는이 동일하지 않은 여러 키/로그 아웃 로그인하고 사용자가 다음입니다 로그 아웃하면 알아 내려고 시도하는 경우
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
0으로 가장은 일에 대한 사용자의 마지막 값을보고하고 그 다음 로그 아웃되지 않은 경우 당신은 그들이 여전히 로그인 알고있다.
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'
을 잠재적으로 더티 데이터가 (실종 로그인 또는 기록을 로그 아웃)하는 경우 다음 비즈니스 의사 결정을해야하는 곳에서 좀 더 복잡해 지지만 마지막 레코드 방법은 여전히 일반적으로 진행됩니다. 로그 아웃하지 않고 지난밤 자정까지 일할 수있는 직원이있을 때 조금 복잡해집니다 .....
감사합니다. 나는 그것을 시험 할 것이다. 귀하의 질문에 대답하기 위해 나는 전혀 몰라! 나는 그것을 쓰지 않았고 나는 그것을 바꿀 수 없다. 회사가 오랫동안 구입 한 소프트웨어입니다. –
@CNL 좋습니다. 가끔은 다른 사람들이 요리 한 것을 먹어야합니다 :-D 내 솔루션에'[Key] = 'LOGIN'을위한 필터를 추가해야합니다 ... – Shnugo
고맙습니다. 그게 효과가있다. 나는 아직 다른 포스터들을 볼 기회가 없었지만 할 수있을 때 나는 업 그레 이드 할 것이다. 당신의 답을 옳은 것으로 표시했습니다. 다시 한번 감사드립니다. –