Mysql数据库列表去重,取最新MAX(create_time)的数据

4,495 阅读1分钟
大家好,我是从业一年的程序员小王。在做的业务中在一张表中出现了很多的重复数据,导致这个的原因是俩表合为一张表。 接下来讲一下思路,都是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


部分内容参考:

blog.csdn.net/sinat_34224…