2013-10-22 2 views
3

로그인이라고하는 테이블이 있습니다.SQL Datediff with group

SELECT LoginDateTime, UserName,(DATEDIFF (DAY, [LoginDateTime], GETDATE())) 
AS [datediff] 
FROM Login; 

결과 :

ID|UserName|LoginDateTime |No. of Days 
1 |User1 |04/09/12 18:07:06|414 
2 |User1 |04/09/12 18:07:51|414 
3 |User1 |04/09/12 18:21:41|414 
4 |Admin |17/09/12 15:36:30|401 
5 |Admin |17/09/12 15:36:30|401 

다음
tableName: Login  
ID|UserName|LoginDateTime 
1 |User1 |04/09/12 18:07:06 
2 |User1 |04/09/12 18:07:51 
3 |User1 |04/09/12 18:21:41 
4 |Admin |17/09/12 15:36:30 
5 |Admin |17/09/12 15:36:30 

내 SQL 명령입니다 : 나는 사용자 당 마지막 로그인에서 아래
참조 샘플 데이터를 일의 번호를 얻으려면

하지만 중복 된 레코드를 제거하고 싶습니다.

ID|UserName|LoginDateTime |No. of Days 
1 |User1 |04/09/12 18:07:06|414 
2 |Admin |17/09/12 15:36:30|401 

감사합니다.

답변

3

각 사용자의 최신 로그인 정보를 얻으려면이 방법을 사용해보십시오.

SELECT UserName, MAX([LoginDateTime]) AS LoginDateTime, 
    (DATEDIFF (DAY, MAX([LoginDateTime]), GETDATE())) as [datediff] 
FROM Login 
GROUP BY UserName 

아이디어는 모든 행 이름으로 그룹에 GROUP BY을 사용하는 것입니다, 그리고 그 최신 loginDateTime를 사용하여 일 수를 계산, 최신 LoginDateTime 만 행을 얻을 MAX 집계 함수를 사용하여.

+0

답장을 보내 주셔서 감사합니다. 그러나 "집계 함수 또는 GROUP BY 절에 포함되어 있지 않기 때문에 선택 목록에 유효하지 않습니다"라는 오류가 나타납니다. – user2617053

+0

몇 분 전에 대답을 업데이트했고, datediff 함수 내에서 loginDateTime에 MAX를 추가했는지 확인하십시오. –

+1

이상한 ID가 GROUP BY에 있는데 문제가되지 않았습니다. –