大家好,我是从业一年的程序员小王。在做的业务中在一张表中出现了很多的重复数据,导致这个的原因是俩表合为一张表。
接下来讲一下思路,都是SQL的基础,只是合在一起使用。
1、首先需要用到的字段create_time,SQL关键字group by
2、函数MAX.然后讲一个概念 子查询select * from (select * from table)
像这样的SQL在上学那会是不明白的,他呢其实也很好理解
其实就是把子查询的结果作为一个表,供你的外边的查询语句使用,这个你所指的子查询里面所有的查询结果字段就是你外面SELECT的范围。
from后面的子查询,你就当做是张表,只不过这张表跟你平时所理解的固定的表不太一样,它是你通过一个查询构建出来的一个表,这个表的数据就是你查询SQL查出来的数据。
例如:SELECT u.id, u.name FROM (SELECT id, name FROM USER WHERE id = 1) u
这个就是构建一个表u,表u里的字段你就可以拿出来用。
3、select *,MAX(create_time) as create_time from tbl_a group by user_id
意思是查出a表中所有的数据并按照user_id 排序并查出重复user_id中create_time最大的

然后是让构件表b外交表a条件 俩表user_id相同create_time相同
4、最终我是这样写
其中这个user_id是重复字符段
a是固定表b是查询构建表
select b.* from
(select *,MAX(create_time) as create_time from tbl_a group by user_id) b
left join tbl_a a on a.user_id = b.user_id and a.create_time = b.create_time
部分内容参考: