당신은 작동이 질문에 대해 몇 가지 옵션이 있습니다, 여기에 조인 또는 상관 하위 쿼리 대신 오라클의 "Windowing Functions with Logical Offset"기능을 사용하는 것입니다.
먼저 테스트 테이블 :
는
Wrote file afiedt.buf
1 create table t pctfree 0 nologging as
2 select date '2011-09-15' + level/(24 * 4) as date_page_requested
3 from dual
4* connect by level <= (24 * 4)
SQL>/
Table created.
SQL> insert into t values (to_date('2011-09-15 11:11:11', 'YYYY-MM-DD HH24:Mi:SS'));
1 row created.
SQL> commit;
Commit complete.
T 지금 오전 11시 11분 11초에 하나 개의 추가 행이 하루에 대한 행 매 분기마다 시간이 포함되어 있습니다. 쿼리는 세 단계로 진행됩니다.
1 with x as (select date_page_requested
2 , count(*) over (order by date_page_requested
3 range between current row
4 and interval '1' hour following) as hour_count
5 from t)
그런 다음 HOUR_COUNT에 의해 순서를 지정 : 마지막으로
6 , y as (select date_page_requested
7 , hour_count
8 , row_number() over (order by hour_count desc, date_page_requested asc) as rn
9 from x)
그리고를 1 단계, 모든 행에 대해, 행의 시간 이후 다음 시간 내에 행의 수를 얻을 수 있습니다 다음 행이 가장 많은 가장 오래된 행을 선택하십시오.
10 select to_char(date_page_requested, 'YYYY-MM-DD HH24:Mi:SS')
11 , hour_count
12 from y
13* where rn = 1
시간당 60 분짜리 창을 여러 개 연결하면 위의 창은 첫 번째 창만 표시합니다.
60 분 동안의 세분성은 무엇입니까? '2011-09-15 08 : 30 : 59.535'에 페이지 요청이 발생한 경우 60 분을 '08', '30', '59'또는 '535'(시간 , 분, 초 또는 밀리 초)? –