mysql删除重复数据保留一条

我有一个保存手机短信的收据表
结构是这样的
表名sms,字符串userid,字符串smsid,长字符串content,主键id
但是因为有些短信数据会重复上传
我现在要删除所有userid和smsid相同的重复数据保留一条,有主键,要怎么做

有时间字段没?能比较先后就可以直接删(mysql 不熟语法可能不正确)

DELETE FROM table1
 WHERE EXISTS (SELECT *
                 FROM table1 t
                WHERE t.userid = table1.userid
                  AND t.smsid = table1.userid
                  AND t.time < table1.time)

否则就只能:把 SELECT DISTINCT 的数据插入临时表;原表清空;从临时表复制数据。

DELETE FROM sms
WHERE NOT EXISTS(
SELECT * FROM sms GROUP BY userid,smsid
)球分图片说明

首先通过group by userid ,smsid找出userid 和smsid相同的一堆id,
再从这一堆id里边找出最小或者最大的(反正找出一个)的一个,这里就选最小的 min(id),此时我们就得到了一堆小的id值
再从sms 表查询id不在这堆小id里边的就删除。

总的sql语句:delete from sms as sms1 where id not in(select min(id) from sms as sms2 group by userid,smsid);

delete from 表名 where 字段ID in (select * from (select max(字段ID) from 表名 group by 重复的字段 having count(重复的字段) > 1) as b);