2012-01-10 2 views
1

사용자가 로그인 할 때 기록하는 테이블이 있습니다. 작년 내에 로그인 한 모든 사용자를 찾고 싶습니다.sql & Date_Time col을 사용하여 여러 필드에서 구분 선택

그래서, 내가 가장 최근 날짜로 된 ClientID를 반환하기 위해 노력하고있어

| Client_ID | DateLoggedIn | 
|  1  | 05/02/10 | 
|  2  | 14/05/11 | 
|  1  | 26/05/11 | 
|  3  | 18/04/10 | 
|  2  | 21/12/11 | 

을 단순화 예 :

| Client_ID | DateLoggedIn | 
|  1  | 26/05/11 | 
|  2  | 21/12/11 | 
|  3  | 18/04/10 | 

나는 그룹으로 사용하여 시도 및 노조 가입 시도 하지만 뭔가 잘못하고있는 것 같아요.

감사합니다.

감사합니다 사람들 :

+1

는 다른 몇 가지를 감안할를 대답 당신은 질문에서 조금 더 명확해질 필요가 있다고 생각합니다. 즉 "모든 사용자"또는 "가장 최근 날짜가있는 ClientID"이며 그 결과의 두 번째 데이터 집합입니까? – Mark

답변

0

사용하는 RDBMS에 의존하는 경우 :

select Client_ID, max(DateLoggedIn) 
from table 
where DateLoggedIn > X /* X = one year ago - derivation will be DB-dependant */ 
group by Client_ID 
order by max(DateLoggedIn) desc 
+0

이것은 찾고 있던 드로이드입니다 !! 나를 위해 시간을 보냈던 너희 모두에게 고마워한다. 정말 대단히 감사한다. 그냥 완전성에 대한 – wotney

+1

, 여기에 내가 마지막에 사용 된 코드는 (내가 SQL Server 2008을 사용하고 있습니다)입니다 SELECT CLIENT_ID, MAX (DateLoggedIn) Login_Tracking FROM WHERE DateLoggedIn> DATEADD (전년 동기 대비, -1, GETDATE ()) GROUP BY 클라이언트 ID ORDER BY max (DateLoggedIn) DESC – wotney

-1
SELECT Client_ID, DateLoggedIn from TableName 
GROUP BY Client_ID 
Order By DateLoggedIn DESC 
+0

그러면 클라이언트 당 최신 클라이언트가 아닌 클라이언트 당 최신 시간을 알 수 있습니다. – StevieG

+0

OP는 Client_ID에 대해 하나의 항목 만 필요합니다. – Mark

+0

@Mark 질문의 표 2에 따라, DateLoggedIn은 클라이언트 당 최대 날짜입니다. – Pratik

1

사용중인 RDBMS에 따라 :

Select top 1 client_ID 
From table 
order by DateLoggedIn desc 

나 :

SELECT client 
FROM (SELECT client_ID, 
     RANK() OVER (ORDER BY DateLoggedIn DESC) rank 
     FROM table) 
WHERE rank = 1 
+0

당신의 제안에 대해 고마워하는데, 두려워하지 않았다. – wotney

1

이 집계 함수의 간단한 GROUPBY이며, 결과를 제한하는 데 사용한다.

X는 다음

select Client_ID, max(DateLoggedIn) 
    from table 
    group by Client_ID 
    having max(DateLoggedIn) > X 

XI의 생각 설정에 의해 fileter 할 날짜는 당신이 다른 마크와 유사

+0

ANother 완벽하게 좋은 답변입니다. 힘내 친구 야 !! – wotney