SQL語句集錦 尋找連續號碼的斷號值

2021-08-22 15:49:40 字數 2040 閱讀 4507

問題一:

table t,列:serial_no

我想能夠查詢一下serial_no這個欄位的不連續的值。

例如:serial_no12

3468

910我想乙個sql語句查出來缺失的號碼,

顯示結果為:57

解決方法:

select

/*+ordered */t2.

serial_no + 1

, min (t3

.serial_no

) -

1from t t1

, t t2

, t t3

where t1

.serial_no

(+) = (t2.

serial_no + 1

) and t1.

serial_no is null

and t3.

serial_no

> t2.

serial_no

group by t2

.serial_no

問題二:

我有乙個表結構,

fphm,kshm

2014,00000001

2014,00000002

2014,00000003

2014,00000004

2014,00000005

2014,00000007

2014,00000008

2014,00000009

2013,00000120

2013,00000121

2013,00000122

2013,00000124

2013,00000125

(第二個欄位內可能是連續的資料,可能存在斷點。)

怎樣能查詢出來這樣的結果,查詢出連續的記錄來。

就像下面的這樣?

2014,00000001,00000005

2014,00000009,00000007

2013,00000120,00000122

2013,00000124,00000125

解決辦法:

sql> spool aaa.log

sql> set echo on

sql> select * from t;

no rows selected

sql> select * from t;

fphm kshm

---------- ----------

2014 1

2014 2

2014 3

2014 4

2014 5

2014 7

2014 8

2014 9

2013 120

2013 121

2013 122

fphm kshm

---------- ----------

2013 124

2013 125

13 rows selected.

sql> @bbb.sql

sql> select b.fphm,min(b.kshm),max(b.kshm)

2 from (

3 select a.*,to_number(a.kshm-rownum) cc

4 from (

5 select * from t order by fphm,kshm

6 ) a

7 ) b

8 group by b.fphm,b.cc

9 /fphm min(b.kshm) max(b.kshm)

---------- ----------- -----------

2013 120 122

2013 124 125

2014 1 5

2014 7 9

SQL查詢連續號碼段

測試資料 create table stest fphm int,kshm nvarchar 10 insert into stest select 2014,00000001 union all select 2014,00000002 union all select 2014,00000003...

學習 SQL查詢連續號碼段的巧妙解法

在itpub上有一則非常巧妙的sql技巧 學習一下,記錄在這裡。最初的問題是這樣的 我有乙個表結構,fphm,kshm 2014,00000001 2014,00000002 2014,00000003 2014,00000004 2014,00000005 2014,00000007 2014,0...

Mysql主鍵相關的sql語句集錦

新增表字段 alter table table1 add transactor varchar 10 not null alter table table1 add id inimfbdcsqxvt unsigned not null auto increment primary key 修改某個表...