database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 38759 게시물 읽기
No. 38759
시간차이 구하기 입니다.
작성자
taiji
작성일
2011-08-05 10:35ⓒ
2011-08-05 10:35ⓜ
조회수
4,776

2011-08-01 오전 9:23:44    LOGIN      user02
2011-08-01 오전 9:59:07    LOGOUT    user02
2011-08-01 오전 9:13:41    LOGIN      user01
2011-08-01 오전 9:49:06    LOGOUT    user01
2011-08-04 오전 11:27:10    LOGIN    user02
2011-08-04 오전 11:40:40    LOGOUT    user02
2011-08-04 오전 10:27:10    LOGIN    user01
2011-08-04 오전 10:40:40    LOGOUT    user01

 

이렇게 있을때 실적이 계속 쌓이게 됩니다.

 

user별 로긴시간을 구하고 싶습니다.   login 하고 logout 하고 차이가 로긴 시간 입니다.

-.-  될려나요

 

 

이 글에 대한 댓글이 총 2건 있습니다.

 됩니다..

self 조인을 이용했습니다만 능력자 분들이 더 훌륭하게 짜주실지 모르겠네요..

 

 

 /* Formatted on 2011/08/05 13:54 (Formatter Plus v4.8.8) */

WITH t AS
     (SELECT TO_DATE ('2011-08-01 9:23:44', 'yyyy-mm-dd hh:mi:ss') tdate,'LOGIN' gb, 'user02' userid
        FROM DUAL
      UNION ALL
      SELECT TO_DATE ('2011-08-01 9:59:07', 'yyyy-mm-dd hh:mi:ss') tdate,'LOGOUT' gb, 'user02' userid
        FROM DUAL
      UNION ALL
      SELECT TO_DATE ('2011-08-01 9:13:41', 'yyyy-mm-dd hh:mi:ss') tdate,'LOGIN' gb, 'user01' userid
        FROM DUAL
      UNION ALL
      SELECT TO_DATE ('2011-08-01 9:49:06', 'yyyy-mm-dd hh:mi:ss') tdate,'LOGOUT' gb, 'user01' userid
        FROM DUAL
      UNION ALL
      SELECT TO_DATE ('2011-08-04 11:27:10', 'yyyy-mm-dd hh:mi:ss') tdate,'LOGIN' gb, 'user02' userid
        FROM DUAL
      UNION ALL
      SELECT TO_DATE ('2011-08-04 11:40:40', 'yyyy-mm-dd hh:mi:ss') tdate,'LOGOUT' gb, 'user02' userid
        FROM DUAL
      UNION ALL
      SELECT TO_DATE ('2011-08-04 10:27:10', 'yyyy-mm-dd hh:mi:ss') tdate,'LOGIN' gb, 'user01' userid
        FROM DUAL
      UNION ALL
      SELECT TO_DATE ('2011-08-04 10:40:40', 'yyyy-mm-dd hh:mi:ss') tdate,'LOGOUT' gb, 'user01' userid
        FROM DUAL)
SELECT   a.tdate, a.gb, a.userid, MIN (b.tdate) tdate, b.gb
    FROM t a LEFT OUTER JOIN t b
         ON a.userid = b.userid AND a.tdate < b.tdate AND b.gb = 'LOGOUT'
   WHERE a.gb = 'LOGIN'
GROUP BY a.tdate, a.gb, a.userid, b.gb
1님이 2011-08-05 13:54에 작성한 댓글입니다.
이 댓글은 2011-08-05 13:56에 마지막으로 수정되었습니다. Edit

WITH t AS
(
SELECT TO_DATE('20110801092344', 'yyyymmddhh24miss') tm, 'LOGIN' gb, 'user02' id FROM dual
UNION ALL SELECT TO_DATE('20110801095907', 'yyyymmddhh24miss'), 'LOGOUT', 'user02' FROM dual
UNION ALL SELECT TO_DATE('20110801091341', 'yyyymmddhh24miss'), 'LOGIN' , 'user01' FROM dual
UNION ALL SELECT TO_DATE('20110801094906', 'yyyymmddhh24miss'), 'LOGOUT', 'user01' FROM dual
UNION ALL SELECT TO_DATE('20110804112710', 'yyyymmddhh24miss'), 'LOGIN' , 'user02' FROM dual
UNION ALL SELECT TO_DATE('20110804114040', 'yyyymmddhh24miss'), 'LOGOUT', 'user02' FROM dual
UNION ALL SELECT TO_DATE('20110804102710', 'yyyymmddhh24miss'), 'LOGIN' , 'user01' FROM dual
UNION ALL SELECT TO_DATE('20110804104040', 'yyyymmddhh24miss'), 'LOGOUT', 'user01' FROM dual

)
SELECT id
     , stm
     , etm
     , NUMTODSINTERVAL(etm - stm, 'day') interval
  FROM (
        SELECT gb, id
             , tm stm
             , LEAD(tm, 1, sysdate) OVER(PARTITION BY id ORDER BY tm) etm
          FROM t
        )
 WHERE gb = 'LOGIN'
;


마농(manon94)님이 2011-08-05 16:36에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
38763toad procedure에서 빨간 X 표시 [2]
설탕
2011-08-09
5912
38762오라클 덤프 관련 질문입니다. [3]
나초보
2011-08-08
3985
38761analyze를 보고 있습니다 [4]
윤용진
2011-08-08
3656
38759시간차이 구하기 입니다. [2]
taiji
2011-08-05
4776
38758INTO [2]
장마철
2011-08-05
3223
38757테이블을 한번만 읽고 처리 하는 방법을 배우고 싶습니다 [5]
빨간운동화
2011-08-05
4437
38756쿼리질문입니다... [3]
한상원
2011-08-04
3288
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다