我有一个学校项目,有点大,只剩下几天了,所以这里有一个问题我坚持,希望你能帮忙。
我有这张桌子:
places(id, otherInfo)
很简单,我需要创建一个SQL查询或PL / SQL函数来检索一定数量的连续行。例如,如果我使用getContiguousPlaces(3);
在具有行的表格上调用该函数:
ID
1
4
5
6
18
19
我希望获得ID
4,5和6的行。
我怎么能这样做?
答案 0 :(得分: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子句。我现在要看看这个...
答案 1 :(得分: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应该是参数
Here是一个小提琴