我是一名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
我确实尝试过,但我面临的问题是以防万一
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中,从连接这两个查询获取数据需要很长时间。
请让我以适当的方式按正确的时间间隔整理数据。
答案 0 :(得分:2)
假设一个简单的表结构,例如:
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;
<强> Example On SQL Fiddle 强>