mysql查詢連續(xù)記錄方式
案例
最近遇到一個(gè)業(yè)務(wù)需求, 需要查找滿足條件且連續(xù)3出現(xiàn)條以上的記錄。
表結(jié)構(gòu):
CREATE TABLE `cdb_labels` ( ? `id` int(10) unsigned NOT NULL AUTO_INCREMENT, ? `type` int(11) NOT NULL DEFAULT '0' COMMENT '標(biāo)簽類型:1喜歡異性類型,2擅長話題', ? `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '標(biāo)簽內(nèi)容', ? PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8 COMMENT='標(biāo)簽內(nèi)容';
所有數(shù)據(jù):
SELECT * FROM cdb_labels WHERE type = 1;

解決思路
1.對滿足初次查詢的數(shù)據(jù)賦予一個(gè)自增列b
select id,type,content,(@b:=@b+1) as b from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;

2.用自增的id減去自增列b
select id,type,content,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;

3.對等差列c分組, 并將分組的id組裝起來
select count(id),GROUP_CONCAT(id) from (
select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1
) as d GROUP BY c;

注:為了方便區(qū)分,這里查詢分組成員要大于5(也就是連續(xù)出現(xiàn)超過5次的記錄):
select if( count(id)>5 ,GROUP_CONCAT(id),null) e from (? ? ? select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1? ) as d GROUP BY c;
那么得到的數(shù)據(jù)只有:9,10,11,12,13,14,15

4.根據(jù)組裝的id去找數(shù)據(jù)
select id,type,content from cdb_labels,(
select if( count(id)>5 ,GROUP_CONCAT(id),null) e from (
select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1
) as d GROUP BY c
) as f where f.e is not null and FIND_IN_SET(id , f.e);
總結(jié)建議
- MySQL的函數(shù)例如: GROUP_CONCAT() 的字符長度有限制(默認(rèn)1024),如果連續(xù)記錄較多會發(fā)生字符截取報(bào)錯(cuò);
- 建議可以分步驟去查詢,防止嵌套子查詢,還可以提升性能而且避免使用MySQL函數(shù);
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SQL查詢超時(shí)的設(shè)置方法(關(guān)于timeout的處理)
為了優(yōu)化OceanBase的query timeout設(shè)置方式,特調(diào)研MySQL關(guān)于timeout的處理,下面與大家分享下處理記錄,感興趣的朋友可以參考下哈2013-04-04
mysql如何將時(shí)間格式化為yyyy-MM-dd或yyyy-MM-dd?HH:mm:ss
這篇文章主要介紹了mysql如何將時(shí)間格式化為yyyy-MM-dd或yyyy-MM-dd?HH:mm:ss問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
CentOS7下mysql 8.0.16 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了CentOS7下mysql 8.0.16 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
Linux下mysql 5.7 部署及遠(yuǎn)程訪問配置
這篇文章主要為大家詳細(xì)介紹了Linux下mysql 5.7 部署及遠(yuǎn)程訪問的配置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09

