msqyl 查询重复数据,保留N条记录。
msqyl 查询重复数据,保留N条记录。
梦想岛 发表于3年前
msqyl 查询重复数据,保留N条记录。
  • 发表于 3年前
  • 阅读 75
  • 收藏 0
  • 点赞 0
  • 评论 2

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 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条

查询结果:


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


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 10
博文 10
码字总数 4356
评论 (2)
IncRediblE
有个问题,这里的两个变量是什么样子的?全局的?
梦想岛

引用来自“IncRediblE”的评论

有个问题,这里的两个变量是什么样子的?全局的?
哪两个? @cn和@rownum: 这两个是为了做递增的
×
梦想岛
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: