2

我有一个学校项目,有点大,只剩下几天了,所以这是我遇到的一个问题,希望你能帮忙。
我有这张桌子:

places(id, otherInfo)

很简单,我需要创建一个 SQL 查询或 PL/SQL 函数来检索一定数量的连续行。例如,如果我使用getContiguousPlaces(3);在具有行的表上调用该函数:

ID
1
4
5
6
18
19

我想得到ID4、5 和 6 的行。

我怎么能那样做?

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”来调整它,你要么必须在动态查询中使用它,要么可能使用 partition by 子句。我现在要看看这个...

于 2012-06-25T20:32:33.280 回答