首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle查询以显示计数和开始、序列结束

Oracle查询以显示计数和开始、序列结束
EN

Stack Overflow用户
提问于 2018-05-11 13:36:15
回答 3查看 643关注 0票数 1

我了解Oracle的基础知识,我是一名java开发人员,我可以通过获取数据并对其进行迭代,在java中执行以下操作/任务。但是,我想知道是否有任何方法显示序列的开始和结束,以及使用SQL(Oracle)查询开始和结束之间的区别。

假设我有一个带有列seq的表TB1,其中包含一些序列号

代码语言:javascript
复制
 SEQ
------
1
2
3
7
8
9
14
19
20

是否有任何方式显示序列开始,结束和计数如下。

代码语言:javascript
复制
Start  | end | count
---------------------
1        3     3
7        9     3
14       14    1
19       20    2   

请给我一些指针,如果它是可以实现或不能。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-11 13:44:25

是。您可以使用塔比托桑方法轻松地完成它。

代码语言:javascript
复制
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;

演示

票数 4
EN

Stack Overflow用户

发布于 2018-05-11 13:43:51

您应该编写一个过程,并通过游标循环进来。将三个temp变量保留在Seq中有中断的位置(确保在Seq列上按顺序排序),并将开始、结束和计数插入到其他表中。

请参阅可能对您有帮助的类似示例

票数 0
EN

Stack Overflow用户

发布于 2018-05-11 13:49:27

代码语言:javascript
复制
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;

输出:

代码语言:javascript
复制
     START        END      COUNT
---------- ---------- ----------
         1          3          3
         7          9          3
        14         14          1
        19         20          2

使用您的表,查询将是

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50293580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档