테이블의 같은 ID인 사용자의 접속일자 간격을 구하고싶어요. 0 3 3,713

by 정진우 SQL 쿼리 접속간격 [2014.01.23 14:49:05]


안녕하세요 ^^

정진우입니다.

이번에도 .. 또 질문을 하게되었네요.

TABLE 의 데이터는 다음과 같다고 가정할 때에,
==============================================================================================
ID | VISIT_DATE
1 | 2014-01-13
2 | 2014-01-20
1 | 2014-01-17
1 | 2014-01-17
2 | 2014-01-20
2 | 2014-01-20
2 | 2014-01-21
1 | 2014-01-21
1 | 2014-01-23
2 | 2014-01-17
3 | 2014-01-20
3 | 2014-01-20
3 | 2014-01-20
3 | 2014-01-21
==============================================================================================

각 아이디가 가지고 있는 방문일자간의 방문일자 간격과, 방문횟수를 구하고싶어요.

방문한 횟수로 한다면 COUNT 로 가능할텐데, 각 일자별 간격을 구하는게 어떻게 해야할지 모르겠습니다.

도움좀 부탁드립니다 !
by 마농 [2014.01.23 16:53:18]
WITH t AS
(
SELECT 1 id, '2014-01-13' visit_date FROM dual
UNION ALL SELECT 2, '2014-01-20' FROM dual
UNION ALL SELECT 1, '2014-01-17' FROM dual
UNION ALL SELECT 1, '2014-01-17' FROM dual
UNION ALL SELECT 2, '2014-01-20' FROM dual
UNION ALL SELECT 2, '2014-01-20' FROM dual
UNION ALL SELECT 2, '2014-01-21' FROM dual
UNION ALL SELECT 1, '2014-01-21' FROM dual
UNION ALL SELECT 1, '2014-01-23' FROM dual
UNION ALL SELECT 2, '2014-01-17' FROM dual
UNION ALL SELECT 3, '2014-01-20' FROM dual
UNION ALL SELECT 3, '2014-01-20' FROM dual
UNION ALL SELECT 3, '2014-01-20' FROM dual
UNION ALL SELECT 3, '2014-01-21' FROM dual
)
, t1 AS
(
SELECT id
     , TO_DATE(visit_date, 'yyyy-mm-dd') visit_date
  FROM t
)
SELECT id
     , visit_date
     , visit_date - LAG(visit_date) OVER(PARTITION BY id ORDER BY visit_date) term
     , COUNT(*) OVER(PARTITION BY id ORDER BY visit_date, ROWNUM) cnt
  FROM t1
;

by 정진우 [2014.01.23 19:19:18]
SELECT VISIT_RETURN, SUM(GAP) AS RETURN_GAP, COUNT(*) AS RETURN_CNT
  FROM(
  SELECT VISIT_TIME, VISIT_RETURN, (TO_DATE(VISIT_RETURN)-TO_DATE(VISIT_TIME)) AS GAP
  FROM( SELECT TO_CHAR(VISIT_TIME, 'YYYY/MM/DD') AS VISIT_TIME, 
    TO_CHAR(LEAD(VISIT_TIME, 1, VISIT_TIME) OVER(PARTITION BY ID_PC ORDER BY ID_VISITOR), 'YYYY/MM/DD') AS VISIT_RETURN
   FROM CI_VISITOR_INFO
   WHERE TO_DATE(TO_CHAR(visit_time, 'YYYY/MM/DD'),'YYYY/MM/DD') 
   BETWEEN TO_DATE ( '2014/01/13' , 'YYYY/MM/DD' )
   AND TO_DATE ( '2014/01/21' , 'YYYY/MM/DD' )
  )
  WHERE (TO_DATE(VISIT_RETURN)-TO_DATE(VISIT_TIME)) != 0
  )
  GROUP BY VISIT_RETURN
이렇게 ..해보았는데요, 이렇게 해도 괜찮을까요 ??

마농님이 올려주신 강좌들 보고 해보았습니다.

by 정진우 [2014.01.23 19:20:38]
지금 오라클 클럽에 댓글 기능이 ..조금 이상한거 같습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입