我了解Oracle的基础知识,我是一名java开发人员,我可以通过获取数据并对其进行迭代,在java中执行以下操作/任务。但是,我想知道是否有任何方法显示序列的开始和结束,以及使用SQL(Oracle)查询开始和结束之间的区别。
假设我有一个带有列seq的表TB1,其中包含一些序列号
SEQ
------
1
2
3
7
8
9
14
19
20是否有任何方式显示序列开始,结束和计数如下。
Start | end | count
---------------------
1 3 3
7 9 3
14 14 1
19 20 2 请给我一些指针,如果它是可以实现或不能。提前谢谢。
发布于 2018-05-11 13:44:25
是。您可以使用塔比托桑方法轻松地完成它。
SELECT MIN(seq)
,MAX(seq)
,count(*)
FROM (
SELECT seq
,seq - row_number() OVER (
ORDER BY seq
) grp
FROM t
)
GROUP BY grp
ORDER BY 1;演示
发布于 2018-05-11 13:43:51
您应该编写一个过程,并通过游标循环进来。将三个temp变量保留在Seq中有中断的位置(确保在Seq列上按顺序排序),并将开始、结束和计数插入到其他表中。
请参阅可能对您有帮助的类似示例。
发布于 2018-05-11 13:49:27
SQL> WITH cte_table (seq) AS (
2 SELECT 1 FROM dual UNION ALL
3 SELECT 2 FROM dual UNION ALL
4 SELECT 3 FROM dual UNION ALL
5 SELECT 7 FROM dual UNION ALL
6 SELECT 8 FROM dual UNION ALL
7 SELECT 9 FROM dual UNION ALL
8 SELECT 14 FROM dual UNION ALL
9 SELECT 19 FROM dual UNION ALL
10 SELECT 20 FROM dual),
11 table_ AS (
12 SELECT seq, seq - row_number() OVER (ORDER BY seq) grp FROM cte_table)
13 SELECT MIN(seq) "START",
14 MAX(seq) "END",
15 COUNT(*) "COUNT"
16 FROM table_
17 GROUP BY grp
18 ORDER BY 1;输出:
START END COUNT
---------- ---------- ----------
1 3 3
7 9 3
14 14 1
19 20 2使用您的表,查询将是
WITH table_ AS (
SELECT seq, seq - row_number() OVER (ORDER BY seq) grp FROM tb1)
SELECT MIN(seq) "START",
MAX(seq) "END",
COUNT(*) "COUNT"
FROM table_
GROUP BY grp
ORDER BY 1;https://stackoverflow.com/questions/50293580
复制相似问题