2017-12-28 39 views
0

로그 아웃하지 않고 로그인 한 모든 항목을 찾을 수있는 쿼리를 찾고 있습니다.날짜 항목에 일치하는 항목 찾기

내 데이터 (테이블의 다른 임의의 데이터를 많이도 있습니다.)이

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

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이 두 경우 모두 로그인이 왜, 왜 안 로그 아웃를 사용 궁금해?

+0

감사합니다. 나는 그것을 시험 할 것이다. 귀하의 질문에 대답하기 위해 나는 전혀 몰라! 나는 그것을 쓰지 않았고 나는 그것을 바꿀 수 없다. 회사가 오랫동안 구입 한 소프트웨어입니다. –

+0

@CNL 좋습니다. 가끔은 다른 사람들이 요리 한 것을 먹어야합니다 :-D 내 솔루션에'[Key] = 'LOGIN'을위한 필터를 추가해야합니다 ... – Shnugo

+0

고맙습니다. 그게 효과가있다. 나는 아직 다른 포스터들을 볼 기회가 없었지만 할 수있을 때 나는 업 그레 이드 할 것이다. 당신의 답을 옳은 것으로 표시했습니다. 다시 한번 감사드립니다. –

0

키가 항상 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' 

을 잠재적으로 더티 데이터가 (실종 로그인 또는 기록을 로그 아웃)하는 경우 다음 비즈니스 의사 결정을해야하는 곳에서 좀 더 복잡해 지지만 마지막 레코드 방법은 여전히 ​​일반적으로 진행됩니다. 로그 아웃하지 않고 지난밤 자정까지 일할 수있는 직원이있을 때 조금 복잡해집니다 .....