我是一名 pl/sql 程序员,在寻找同一日期系列的连续性时遇到问题 假设我有像
这样的系列1000,1001, 1002,1003, 1004,1005, 1016,1017, 1018,1019, 1020,1021, 1035,1036, 1037,1038, 1039,1040
我正在寻找输出
from_series ------------- to_series 1000 ------------- 1005 1016 ------------- 1021 1035 ------------- 1040
i did trying it with but the problem which i faced is in case
SELECT *
FROM retort_t r
where NOT EXISTS
(
SELECT 'X'
FROM retort_t
r.series_NO-ISSUE_NO=1 );
SELECT *
FROM retort_t r
where NOT EXISTS
(
SELECT 'X'
FROM retort_t
ISSUE_NO=r.series_NO+1 );
我通过对齐连接上述两个查询来获得结果。对于很少的记录来说是可以的,但是我的记录在 lac 中,从连接这两个查询中获取数据需要很长时间。
请让我以正确的间隔整理数据的适当方法。
最佳答案
假设一个简单的表结构,例如:
CREATE TABLE T (x INT);
INSERT INTO T (x) VALUES
(1000), (1001), (1002), (1003),
(1004), (1005), (1016), (1017),
(1018), (1019), (1020), (1021),
(1035), (1036), (1037), (1038),
(1039), (1040);
您可以使用 ROW_NUMBER() 获取连续数字的静态值,然后可以按该值进行分组以获得某个范围内的最小值和最大值:
SELECT MIN(x) AS RangeStart, MAX(x) AS RangeEnd
FROM ( SELECT X,
X - ROW_NUMBER() OVER(ORDER BY x) AS GroupBy
FROM T
) t
GROUP BY GroupBy;
关于sql - 如何使用pl/sql查找连续序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14475667/