MySQL 缺失範圍問題
本例子運用的是range_problem中的表和資料
最終要得到的缺失範圍為:
方案一及解決思路:
1、找出start_range該間斷點之前的值,然後把該值+1,即為start_range
2、透過間斷點找出下一個值,對該值-1,即為end_range
1、對於間斷點之前的值:
得出:
若不在父查詢中加上and條件,則a列的最大值67將不會排除在外,此處67被篩選出來無意義。
2、在上面的基礎上,再透過子查詢處理end_range:
這將得出我們想要的缺失範圍。
方案二及解決思路:
將range_problem中的資料進行位移匹配,如果是連續的值,那麼其差值應該在1,反之大於1:
得出:
根據結果我們可以知道,next-cur=1時,值為連續的,不連續的值為(3,48),(48,50),(53,66)
而我們要求的是(4,47),(49,49),(54,65),即(cur+1,next-1)
在上面的基礎上,再加以修改:
這將得出我們想要的缺失範圍。
最後:
此處演示的是缺失範圍是整型型別。在生產環境中遇到的型別可能是整型,也可能是時間型別,兩者並非有多大的區別,稍作修改就可以將該例子轉換為時間型別。
-
create table range_problem(
-
a int(10) unsigned not null,
- primary key (a));
-
insert into range_problem values(1);
-
insert into range_problem values(2);
-
insert into range_problem values(3);
-
insert into range_problem values(48);
-
insert into range_problem values(50);
-
insert into range_problem values(51);
-
insert into range_problem values(52);
-
insert into range_problem values(53);
-
insert into range_problem values(66);
- insert into range_problem values(67);
最終要得到的缺失範圍為:
方案一及解決思路:
1、找出start_range該間斷點之前的值,然後把該值+1,即為start_range
2、透過間斷點找出下一個值,對該值-1,即為end_range
-
select a
-
from range_problem a
-
where not exists (select *
-
from range_problem b
-
where a.a+1 = b.a)
-
and
-
a < (select max(a)
- from range_problem);
若不在父查詢中加上and條件,則a列的最大值67將不會排除在外,此處67被篩選出來無意義。
2、在上面的基礎上,再透過子查詢處理end_range:
-
select a+1 as start_range,
-
(select min(a)-1
-
from range_problem c
-
where c.a > a.a) as end_range
-
from range_problem as a
-
where not exists (select *
-
from range_problem b
-
where a.a+1 = b.a)
-
and
-
a < (select max(a)
- from range_problem);
這將得出我們想要的缺失範圍。
方案二及解決思路:
將range_problem中的資料進行位移匹配,如果是連續的值,那麼其差值應該在1,反之大於1:
-
select a cur,
-
(select min(a)
-
from range_problem b
-
where b.a>a.a) next
- from range_problem a
得出:
根據結果我們可以知道,next-cur=1時,值為連續的,不連續的值為(3,48),(48,50),(53,66)
而我們要求的是(4,47),(49,49),(54,65),即(cur+1,next-1)
在上面的基礎上,再加以修改:
-
select cur+1 start_range,next-1 end_range
-
from(select a cur,
-
(select min(a)
-
from range_problem b
-
where b.a > a.a) next
-
from range_problem a) c
- where next-cur>1;
最後:
此處演示的是缺失範圍是整型型別。在生產環境中遇到的型別可能是整型,也可能是時間型別,兩者並非有多大的區別,稍作修改就可以將該例子轉換為時間型別。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1255445/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 間斷範圍問題MySql
- MySQL連續範圍問題MySql
- MySQL 最小缺失值問題MySql
- JAVA實現附近範圍內公交定位問題Java
- MySQL欄位的取值範圍MySql
- MySQL限制IP網段範圍從遠端訪問的方法MySql
- MySQL取得某一範圍隨機數MySql隨機
- 三角函式:基礎知識&&Omega範圍問題函式
- MySQL8.0之跳躍範圍掃描MySql
- MySQL運維8-Mycat範圍分表MySql運維
- SonarQube系列-透過配置掃描分析範圍,聚焦關鍵問題
- 效能問題往往出現在開發人員可控範圍之外
- MySQL中各種欄位的取值範圍(轉)MySql
- 公司公司程式碼業務範圍成本控制範圍概念
- 隨機範圍小數和隨機範圍整數隨機
- 關於數字的經典SQL程式設計:連續範圍問題SQL程式設計
- JavaScript 拖拽限定範圍JavaScript
- SciPy 應用範圍
- groovy之範圍特性
- oracle hint有效範圍Oracle
- 關於聯合索引,範圍查詢,時間列索引的幾個問題索引
- MySQL next-key lock 加鎖範圍是什麼?MySql
- mysql int(3)與int(10)的數值範圍相同嗎?MySql
- 關於python中填充缺失值的問題Python
- 筆試程式碼題--搜狗--汪仔做對的題數範圍筆試
- 動態範圍控制原理
- 資料型別範圍資料型別
- MongoDB的適用範圍MongoDB
- JavaFX教程-範圍表示式Java
- int/double資料範圍
- 保護範圍和物件物件
- 檢視分割槽範圍
- mysql中bigint、int、mediumint、smallint 和 tinyint的取值範圍MySql
- Mysql索引的使用 - 組合索引 + 範圍條件的處理MySql索引
- Java入門系列之訪問修飾符作用範圍Java
- Double型別數值相加導致精度缺失問題型別
- JavaScript 限定範圍的拖拽效果JavaScript
- JavaScript 限定範圍拖動效果JavaScript