2

私は学校のプロジェクトを持っていて、ちょっと巨大で、あと数日しか残っていないので、ここに私が立ち往生している問題が1つあります。あなたが助けてくれることを願っています。
私はこのテーブルを持っています:

places(id, otherInfo)

非常に単純ですが、SQLクエリまたはPL / SQL関数を作成して、特定の数の連続する行を取得する必要があります。たとえばgetContiguousPlaces(3);、行があるテーブルでOnを使用して関数を呼び出すと、次のようになります。

ID
1
4
5
6
18
19

4、5、6の行を取得したいID

どうすればそれができますか?

4

2 に答える 2

1

これを試して:

WITH t AS
  (SELECT p.*, LEVEL l,
                     CONNECT_BY_ROOT id AS cbr
   FROM places p CONNECT BY
   PRIOR id = id-1)
SELECT *
FROM t
WHERE cbr IN
    (SELECT cbr
     FROM t
     WHERE l = 3 )
and l <= 3
ORDER BY cbr,
         id

定数3はパラメータである必要があります

これがフィドルです

于 2012-06-25T21:09:07.933 に答える
1
SELECT p.id, p.prev_id1, p.prev_id2
FROM (
        SELECT id, LAG(id, 1) OVER(ORDER BY id) prev_id1, LAG(id, 2) OVER(ORDER BY id) prev_id2
        FROM places
     ) p
WHERE p.prev_id1 = id-1 
AND   p.prev_id2 = id-2

ここに行きます:http ://sqlfiddle.com/#!4 / a20e1 / 1

ただし、必要に応じて、別の方法でデータを取得できると思います。

編集:この場合、パラメータ「3」の場合。ただし、数値「n」を使用して適合させる場合は、動的クエリ内で使用するか、partitionby句を使用する必要があります。これを見ていきます...

于 2012-06-25T20:32:33.280 に答える