問題一:
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 修改某個表...