2013-06-21 2 views
1

모든 직원의 직원 ID, 로그인 시간 및 각 직원의 로그 아웃 시간이 포함 된 테이블에서 매일 로그인 시간과 로그 아웃 시간에서 최소값을 추출해야합니다. 문제는 매일 직원이 여러 번 로그인하고 로그 아웃 할 수 있다는 것입니다. 따라서 다음과 같은 샘플 데이터가 있습니다.Oracle의 테이블에서 최소 및 최대 시간을 추출하는 방법은 무엇입니까?

NAME  EMPID   LOGIN TIME   LOGOUT TIME 
user1  37  16-JAN-12 03.07.37 16-JAN-12 03.07.44 
user5  21  16-JAN-12 02.00.36 16-JAN-12 04.45.34 
user3  12  16-JAN-12 05.35.35 16-JAN-12 06.39.57 
user3  40  16-JAN-12 02.54.13 16-JAN-12 07.12.16 
user4  33  16-JAN-12 07.29.43 16-JAN-12 07.59.42 
user1  40  16-JAN-12 07.12.39 16-JAN-12 07.59.50 
user3  30  16-JAN-12 11.30.50 16-JAN-12 08.02.42 
user990  31  17-JAN-12 11.46.12 17-JAN-12 01.46.13 
user29  23  17-JAN-12 10.39.18 17-JAN-12 05.00.02 
user20  21  17-JAN-12 04.59.37 17-JAN-12 05.00.17 
user990  40  17-JAN-12 10.55.48 17-JAN-12 05.00.50 
user4  23  17-JAN-12 05.00.11 17-JAN-12 05.01.08 
user4  21  17-JAN-12 04.59.37 17-JAN-12 05.01.21 

시도해 보았습니다. 단 하루 만 작동합니다.

SELECT username, MIN(login_time), MAX(logout_time) 
FROM Table_Name 
WHERE trunc(login_time) = '19-JAN-12' 
GROUP BY username; 

입력 한 날짜에 대해 다음과 같은 결과가 표시됩니다. 이

NAME 

user1 19-JAN-12 11.00.26 19-JAN-12 08.00.53 
user3 19-JAN-12 11.05.53 19-JAN-12 11.36.02 
user29 19-JAN-12 09.49.32 19-JAN-12 06.48.08 
user990 19-JAN-12 10.59.59 19-JAN-12 08.11.15 
use23 19-JAN-12 06.40.36 19-JAN-12 08.36.07 
user43 19-JAN-12 11.23.05 19-JAN-12 08.28.02 
user89 19-JAN-12 02.38.54 19-JAN-12 07.28.02 
user4 19-JAN-12 01.24.09 19-JAN-12 06.01.07 
user7 19-JAN-12 03.29.17 19-JAN-12 08.34.02 
user9 19-JAN-12 09.42.13 19-JAN-12 06.35.54 
+0

왜 -1? 내가 범한 범죄는 무엇인가? :) – MontyPython

+2

나는 당신을 평가 절하하지 않았지만 당신의 질문이 약간 불분명하다는 (잘못된) 대답의 수를 추측 할 수 있습니다. 편집으로 인해 많은 부분이 개선되었지만 여전히 입력 데이터에는 16-JAN, 원하는 출력 데이터에는 19-JAN이 있습니다. –

+0

나는 내가 원하는 결과를 가지고있다. 고마워. 내가 가지고있는 것은 최소 로그인 시간과 최대 로그 아웃 시간을 알려주는 모든 날짜에 대해 모든 사용자에 대해 하나의 기록입니다. 이 경우 로그인 및 로그 아웃 날짜는 동일합니다. – MontyPython

답변

7
SELECT username, TRUNC(login_time), min(login_time), max(logout_time) 
    FROM table_name 
GROUP BY username, TRUNC(login_time) 
ORDER BY username, TRUNC(login_time); 
+0

고맙습니다 wolφi, 나는 가까이에 있었지만 제대로하지 못했습니다! – MontyPython

0

그것은 간단 할 수있다, 나는 모든 날짜를 원하는 것입니다 같은 : 그 직원/하루 한 직원/하루 라인, 최초 로그인 및 최신 로그 아웃을 반환합니다

SELECT TRUNC(LOGIN_TIME]),NAME, EMPID, MIN(LOGIN_TIME), MAX(LOGOUT_TIME) 
FROM Table_Name 
GROUP BY TRUNC(LOGIN_TIME),NAME, EMPID 
ORDER BY EMPID, TRUNC(LOGIN_TIME) 

. 오라클에서

+0

나는이 방법을 이미 시도했지만이 방법은 전체 데이터베이스에서 사용자 당 하나의 레코드 만 반환합니다. 모든 사용자 이름에 대해 매일 최소 로그인 시간과 최대 로그 아웃 시간을 알아 내면됩니다. 나는 이것을 매일 필요로한다. ** GROUP BY NAME을 사용하여 EMPID **는 나에게 레코드 수 = 사용자 이름 수를 제공합니다. 나는 그것을 매일 필요로한다. – MontyPython

+1

맞아요.주의를 기울이지 않았습니다. 업데이트 된 답변을 확인하십시오. –

0

:

SELECT NAME, TO_CHAR(IN_DT,'DD-MM-YYYY') as DT, TO_CHAR(MIN(IN_DT),'HH24:MI:SS') as LOGIN, TO_CHAR(MAX(OUT_DT),'HH24:MI:SS') as LOGOUT FROM USER_LOG GROUP BY NAME, TO_CHAR(IN_DT,'DD-MM-YYYY'); 

enter image description here

관련 문제