5 일 연속 로그 인 한 사용자 조회

1592 단어 ORACLE
1. 관심 1: 요구 연속 5 일, 총 5 일 을 초과 하지 않 습 니 다
2. 관심 2: 하루 에 여러 번 로그 인 할 수 있 습 니 다.
 
테스트 데이터
 
CREATE TABLE t(user_id varchar2(50), access_time date);

insert into t values('a',sysdate-10);
insert into t values('a',sysdate-9);
insert into t values('a',sysdate-8);
insert into t values('a',sysdate-7);
insert into t values('a',sysdate-6);
insert into t values('b',sysdate-11);
insert into t values('b',sysdate-9);
insert into t values('b',sysdate-8);
insert into t values('c',sysdate-10);
insert into t values('c',sysdate-9);
insert into t values('c',sysdate-8);
insert into t values('c',sysdate-7);
insert into t values('c',sysdate-6);
insert into t values('c',sysdate-1);


해결 사고 1: 분석 함수 사용
SELECT distinct UID
  FROM (SELECT UID,
               LAG (access_dt, 4) OVER (PARTITION BY UID ORDER BY access_dt)
                  prev_access_dt, access_dt
          FROM ( SELECT UID, TRUNC (access_time) access_dt
                    FROM t
                GROUP BY UID, TRUNC (access_time)))
WHERE prev_access_dt IS NOT NULL AND (access_dt - prev_access_dt) = 4;

해결 방향 2: rownum 사용
SELECT DISTINCT user_name
    FROM ( SELECT user_name, TRUNC (access_time) access_dt
              FROM t
          GROUP BY user_name, TRUNC (access_time)
          ORDER BY user_name, TRUNC (access_time))
GROUP BY user_name, TO_CHAR (access_dt, 'J') - rownum
  HAVING COUNT (*) > 4;

좋은 웹페이지 즐겨찾기