以前講過大量的重復(fù)數(shù)據(jù)過濾語句,下面小編來給大家介紹一些自己收藏了查詢篩選重復(fù)數(shù)據(jù)sql語句,希望對各位朋友有所幫助.
查詢重復(fù)數(shù)據(jù)數(shù)量,代碼如下:
select device_id from device group by device_id having count(device_id) > 1;
查詢所有重復(fù)數(shù)據(jù),代碼如下:
- select userid, device_id, create_date from device where device_id in (select device_id from device group by device_id having count(device_id) > 1) order by device_id,create_date desc ;
重復(fù)一條中create_date 最新的那一條,代碼如下:
select max(create_date) from device group by device_id having count(device_id)>1;
篩選查詢,代碼如下:
- select * from device where device_id in (select device_id from device group by device_id having count(device_id) > 1) and create_date not in (select max(create_date) from device group by device_id having count(device_id)>1) order by device_id,create_date desc ;
下面再看一些實(shí)例吧.
表結(jié)構(gòu)如下,代碼如下:
- mysql> desc test1;
- +--------------+------------------+------+-----+---------+----------------+
- | Field | Type | Null | Key | Default | Extra |
- +--------------+------------------+------+-----+---------+----------------+
- | ID | int(10) unsigned | NO | PRI | NULL | auto_increment |
- | SENDERNAME | varchar(32) | YES | | NULL | |
- | RECEIVERNAME | varchar(64) | YES | | NULL | |
- | SENDER | varchar(64) | NO | | NULL | |
- | RECEIVER | varchar(64) | NO | | NULL | |
- | SUBJECT | varchar(512) | NO | | NULL | |
- | CONTENT | text | NO | | NULL | |
- | PRIORITY | int(11) | NO | MUL | NULL | |
- | STATUS | int(11) | NO | MUL | NULL | |
- | CREATETIME | datetime | NO | | NULL | |
- | SENDTIME | datetime | YES | | NULL | |
- +--------------+------------------+------+-----+---------+----------------+
subject和RECEIVER,需要做uniq key,但設(shè)計(jì)時(shí)未做,,后面的數(shù)據(jù)就有很多重復(fù)的記錄.
1.查詢需要?jiǎng)h除的記錄,會保留一條記錄,代碼如下:
- select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id< b.bid where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid
2.刪除重復(fù)記錄,只保留一條記錄,注意,subject,RECEIVER 要索引,否則會很慢的,代碼如下:
- delete a from test1 a, (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid; //Vevb.com
好了篩選重復(fù)數(shù)據(jù)的sql語句大概就這些了,如果你能理解那幾乎不擔(dān)心重復(fù)數(shù)據(jù)這一說了.
|
新聞熱點(diǎn)
疑難解答
圖片精選