sql - oracle中如何将数字缺失100秒

标签 sql oracle gaps-and-islands gaps-in-data

我需要在oracle中找到一个表列中缺失的数字,其中缺失的数字必须取100s,这意味着如果在2000年到2099年之间至少找到1个数字,那么2000年到2099年之间的所有缺失数字都必须是返回等等。

这是一个说明我需要什么的示例:

create table test1 ( a number(9,0));

insert into test1 values (2001);
insert into test1 values (2002);
insert into test1 values (2004);
insert into test1 values (2105);
insert into test1 values (3006);
insert into test1 values (9410);
commit;

结果必须是2000、2003、2005到2099、2100到2104、2106到2199、3000到3005、3007到3099、9400到9409、9411到9499。

我从这个查询开始,但它显然没有返回我需要的内容:

SELECT Level+(2000-1) FROM dual  CONNECT BY LEVEL  <= 9999 
MINUS SELECT a FROM test1;

最佳答案

您可以按如下方式使用层次结构查询:

SQL> SELECT A FROM (
  2  SELECT A + COLUMN_VALUE - 1 AS A
  3    FROM ( SELECT DISTINCT TRUNC(A, - 2) A
  4         FROM TEST_TABLE) T
  5   CROSS JOIN TABLE ( CAST(MULTISET(
  6  SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 100
  7     ) AS SYS.ODCINUMBERLIST) ) LEVELS
  8  )
  9  MINUS
 10  SELECT A FROM TEST_TABLE;

         A
----------
      2000
      2003
      2005
      2006
      2007
      2008
      2009
.....
.....

关于sql - oracle中如何将数字缺失100秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64711918/

相关文章:

r - 在 R 或 PostgreSQL 中形成时空接近轨迹组

mysql - 另一种间隙检测

mysql - 使用时间格式选择 +- 2 分钟()

mysql - 按字母顺序排列在最后的特殊字符 sql

spring - 数据库读锁定

spring - 使用 Hibernate 和 Oracle 找不到架构

SQL 日期范围查询 - 表比较

mysql - 如何从总和列表(3个表)中获取最高的x值 - MySQL

mysql - 极其缓慢的 MySQL 查询

SQL REGEX 搜索表名