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擅長(zhǎng)話題', ? `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.對(duì)滿足初次查詢的數(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.對(duì)等差列c分組, 并將分組的id組裝起來(lái)
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)超過(guò)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() 的字符長(zhǎng)度有限制(默認(rèn)1024),如果連續(xù)記錄較多會(huì)發(fā)生字符截取報(bào)錯(cuò);
- 建議可以分步驟去查詢,防止嵌套子查詢,還可以提升性能而且避免使用MySQL函數(shù);
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IPv6設(shè)置后如何解決MySQL無(wú)法連接localhost的問(wèn)題
這篇文章主要介紹了IPv6設(shè)置后如何解決MySQL無(wú)法連接localhost的問(wèn)題,需要的朋友可以參考下2016-04-04教你如何在MySQL命令行中使用SQL語(yǔ)句的規(guī)則
這篇文章主要介紹了教你如何在MySQL命令行中使用SQL語(yǔ)句的規(guī)則 ,需要的朋友可以參考下2014-08-08詳解如何利用Xtrabackup進(jìn)行mysql增量備份
這篇文章主要為大家介紹了如何利用Xtrabackup進(jìn)行mysql增量備份詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10修改Innodb的數(shù)據(jù)頁(yè)大小以優(yōu)化MySQL的方法
這篇文章主要介紹了修改Innodb的數(shù)據(jù)頁(yè)大小以優(yōu)化MySQL的方法,Innodb是MySQL下一個(gè)頗具人氣的數(shù)據(jù)引擎,需要的朋友可以參考下2015-05-05Navicat 遠(yuǎn)程連接 MySQL實(shí)現(xiàn)步驟解析
這篇文章主要介紹了Navicat 遠(yuǎn)程連接 MySQL實(shí)現(xiàn)步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08mysql-8.0.15-winx64 解壓版安裝教程及退出的三種方式
本文通過(guò)圖文并茂的形式給大家介紹了mysql-8.0.15-winx64 解壓版安裝,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04mysql 正則表達(dá)式查詢含有非數(shù)字和字符的記錄
這篇文章主要介紹了mysql 正則表達(dá)式查詢含有非數(shù)字和字符的記錄的相關(guān)資料,需要的朋友可以參考下2016-12-12mysql8.0.11 winx64安裝配置方法圖文教程(win10)
這篇文章主要為大家詳細(xì)介紹了win10下mysql8.0.11 winx64安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05MySQL?Binlog日志的記錄模式寫入機(jī)制文件操作詳解
這篇文章主要介紹了MySQL?Binlog日志的記錄模式寫入機(jī)制文件操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07