2011-05-16 5 views
0

선택한 목록의 마지막에없는 N-행을 검색 할 필요 : 내가 처음 300 개 행을 얻을 여기은 시작 또는 내가 SQL 문 작성했습니다

select * from (
    select count(*) as NumberofSignals,signals.transmitter_account,signals.class,signals.type,signals.signal_mode, 
    signals.area_id,signals.sector_id,signals.region_info_id,signals.zone_info_id,signals.user_id,signals.device_id, 
    signals.panel_name,signals.panel_id,signals.sector_name,signals.region_code,signals.area_name,signals.zone_code, 
    signals.description,signals.transmitter_name,signals.transmitter_id,signals.color,'event' as Event,get_name(signals.id,'event') as event_value, 
    'packetnumber' as packetnumber,get_name(signals.id,'packetnumber') as packetnumber_value,wm_concat(distinct get_name(signals.id,'repeater')) as repeater, 
    round(avg(get_name(signals.id,'signallevel'))) as avg_signallevel,min(to_char(signals.signal_forming_time, 'yyyy/mm/dd hh24:mi:ss')) as formingtime, 
    get_name(signals.id,'address') as address,get_name(signals.id,'username') as username,get_name(signals.id,'chaneltype') as channeltype, 
    get_name(signals.id,'code') as code,get_name(signals.id,'account') as account 
    from signals,signal_custom_fields where signals.id = signal_custom_fields.signal_id and 
    signals.id in (select id from (select id,rownum num from((select signals.id 
    from signals,signal_custom_fields where signal_custom_fields.field_name = 'event' 
    and signal_custom_fields.field_value is not null and signals.id = signal_custom_fields.signal_id 
    and signals.signal_forming_time >= to_date('2011/5/10 14:34:44', 'yyyy/mm/dd hh24:mi:ss') 
    AND signals.signal_forming_time <= to_date('2011/5/10 15:34:44', 'yyyy/mm/dd hh24:mi:ss')) 
    intersect (select distinct signals.id from signals,signal_custom_fields 
    where signal_custom_fields.field_name = 'packetnumber' and signal_custom_fields.field_value is not null 
    and signals.id = signal_custom_fields.signal_id 
    and signals.signal_forming_time >= to_date('2011/5/10 14:34:44', 'yyyy/mm/dd hh24:mi:ss') 
    AND signals.signal_forming_time <= to_date('2011/5/10 15:34:44', 'yyyy/mm/dd hh24:mi:ss'))) 
    order by id desc)) group by 'event',signals.transmitter_account,signals.class, 
    signals.type,signals.signal_mode,signals.area_id,signals.sector_id,signals.region_info_id,signals.zone_info_id, 
    signals.user_id,signals.device_id,signals.panel_name,signals.panel_id,signals.sector_name,signals.region_code, 
    signals.area_name,signals.zone_code,signals.description,signals.transmitter_name,signals.transmitter_id, 
    signals.color, get_name(signals.id,'event'), 'packetnumber',get_name(signals.id,'username'), 
    get_name(signals.id,'chaneltype'), 
    get_name(signals.id,'code'), 
    get_name(signals.id,'account'), get_name(signals.id,'packetnumber'),get_name(signals.id,'address'), 
    TO_CHAR(signals.signal_forming_time ,'dd/mm/yyyy hh24'), 
    TRUNC(to_number(to_char(signals.signal_forming_time ,'mi'))/(30)) 
    order by event)where rownum < 300 

와,하지만 난에 방법이 필요합니다 두 번째 300 행을 검색하기 위해이 문장을 rewright ???

+0

[Oracle 및 SQL Server 및 일반 페이지 방법을 사용하여 페이징] 가능한 중복 (http://stackoverflow.com/questions/488108/paging-with-oracle-and-sql-server-and-generic-paging-method) –

+0

NB 나중에 참조 할 수 있습니다. 관련 질문에 대해서는 무의미한 SQL 문을 게시 할 필요가 없습니다. 쪽수 매기기. "rownum <300"이 만족스러운 emp에서 ename을 선택하십시오! 내가 의 모든 ROWNUM과 pegination의 종류 ... 선택 FIRST_NAME을 시도 렸기 때문에 –

+0

내가 모든 SQL 문을 작성했습니다 (() 를 FIRST_NAME하여 some_table 순서에서 FIRST_NAME을 선택 에서 RN, FIRST_NAME로 ROWNUM 선택) 여기서 RN> 100 rn <= 200 제 경우에는 작동하지 않습니다. – Viktor

답변

0

쿼리에 첫 번째 중첩 테이블에 나열된 rownum이 없습니다.

--create a demo table 
DROP TABLE paging_test; 
CREATE TABLE paging_test AS 
    (SELECT rownum x FROM user_tables 
); 

--count how many records exist (in my case there is 821) 
SELECT COUNT(*) 
FROM paging_test; 

--get the first 300 rows 
SELECT * 
FROM 
    (SELECT rownum rn, x FROM paging_test ORDER BY x 
) pt 
WHERE pt.rn BETWEEN 1 AND 300 ; 

--get the next 300 rows 
SELECT * 
FROM 
    (SELECT rownum rn, x FROM paging_test ORDER BY x 
) pt 
WHERE pt.rn BETWEEN 300 AND 600 ; 

또한 나의 레퍼런스에 관심이있을 수 있습니다 :

참고 : http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:948366252775

당신은 최상위 수준에 where 절에 기능 사이를 할 수있는 최초의 중첩 테이블에 ROWNUM 열을 추가