1

これは私の質問です:

select * 
  from (SELECT "MYTABLE".* FROM "MYTABLE" ORDER BY "COMPANY" ASC, "SURNAME" ASC) 
 where ROWNUM between 0 and 20

これは期待どおりに機能しますが、次の20レコードを取得しようとすると次のようになります。

select * 
  from (SELECT "MYTABLE".* FROM "MYTABLE" ORDER BY "COMPANY" ASC, "SURNAME" ASC) 
 where ROWNUM between 20 and 40

結果セットは空ですか?これはなぜですか。次の20レコードを取得するにはどうすればよいですか。

4

1 に答える 1

4

rownum は、行がフェッチされたときにのみインクリメントされるため、 rownum をネストする必要があります。rownum > 1行が返されない場所を言ってください。例えば

select *
  from (select a.*, rownum r 
          from (select mytable.*
                  from mytable 
                 order by company asc, surname asc) a
         where rownum <= 40
       )
 where r >= 20
 order by r;

row_number()または、分析を使用できます

select *
  from (select mytable.*, row_number() over (order by company asc, surname asc) rn
          from mytable) 
 where rn between 20 and 40
 order by rn;
于 2013-03-05T12:31:32.400 に答える