sql - 获取一定数量的连续行

标签 sql oracle plsql

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

places(id, otherInfo)

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

ID
1
4
5
6
18
19

我想要获取 ID 4、5 和 6 的行。

我怎样才能做到这一点?

最佳答案

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

关于sql - 获取一定数量的连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196744/

相关文章:

plsql - 用于测试字符串是否为数字的简单 PL/SQL 函数

php - 从数据库中选择 WHERE 一些参数等于字符串 var 的一部分

sql - 远离 SQL 注入(inject)

sql-server - SQL Server 与 Oracle

arrays - Oracle存储过程使用数组作为表插入的参数

sql - SQL * Loader-926 : OCI error while executing delete/truncate ORA-01031: insufficient privileges

mysql - GROUP BY x = DISTINCT(所有列 - x)吗?

sql - Powershell SQL Server 插入 - 最佳实践

sql - 检查某个行是否存在,否则选择不同的行

oracle - ALL_PROCEDURES View 不显示 PROCEDURE_NAME