msqyl 查询重复数据,保留N条记录。

例如一个短信表的某个用户有多条短信记录,只查询两条记录。

短信表结构

CREATE TABLE `s_sms_list` (
  `sms_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '短信递增ID',
  `sms_phone` varchar(20) NOT NULL COMMENT '手机号码',
  `sms_content` varchar(255) NOT NULL COMMENT '短信内容',
  `sms_userid` int(11) NOT NULL COMMENT '接收者的用户u_id,对应user表的u_id',
  PRIMARY KEY (`sms_id`),
  KEY `all` (`sms_content`,`sms_userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


SELECT
  sms_id,
  sms_userid,
  sms_content
FROM
(
SELECT
  CASE 
    WHEN @cn != sms_userid THEN @rownum:= 1 
    ELSE @rownum:= @rownum + 1  
    END AS myNo,
  @cn := sms_userid AS sms_userid,
  sms_id,
  sms_content
FROM
  (SELECT @rownum:=0) r,
  (SELECT @cn:='') p,
  s_sms_list
ORDER BY
  sms_userid
) subQuery
WHERE
	myNo <3

重点在 myNo ,myNo<3 表示保留2条,类推 <4保留3条

查询结果:

msqyl 查询重复数据,保留N条记录。


实际上(32497的用户不止两条信息)

msqyl 查询重复数据,保留N条记录。


你可能感兴趣的:(msqyl 查询重复数据,保留N条记录。)