热线电话:13121318867

登录
2019-02-26 阅读量: 851
sql数据去重问题

问题描述:

如下图所示:

根据sendid和receiveid进行数据去重,就是说其实id=22的数据和id=25的数据是一条数据。去重后取时间最新的那条数据

sql语句应该怎么写呢?

解决方法:

CREATE TABLE `message` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sendid` int(11) NOT NULL DEFAULT '0',
`receiveid` int(11) NOT NULL DEFAULT '0',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

INSERT INTO `message` (`id`, `sendid`, `receiveid`, `create_time`)
VALUES
(1, 321, 3, '2017-01-13 10:23:03'),
(2, 322, 4, '2017-01-13 10:23:11'),
(3, 123123, 9, '2017-01-13 10:23:25'),
(4, 0, 0, '2017-01-13 10:22:54'),
(5, 4, 321, '2017-01-13 10:22:54'),
(6, 4, 322, '2017-01-13 10:23:17'),
(7, 9, 12232, '2017-01-13 10:23:30'),
(8, 0, 0, '2017-01-13 11:29:42');
SELECT *
FROM message m3
WHERE id NOT IN (#查询需要去重的id
select DISTINCT m1.id
FROM message AS m1
INNER JOIN message AS m2
WHERE m1.id != m2.id #过滤掉自身关联
AND ((
m1.receiveid = m2.sendid
AND m1.sendid = m2.receiveid)
OR (
m1.sendid = m2.sendid
AND m1.receiveid = m2.receiveid ) )
AND m1.create_time < m2.create_time #
GROUP BY m1.id,
m2.id);
0.0000
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子