2 sgsy 2013 sgsy_2013 于 2016.05.05 16:33 提问

sql去除重复记录问题,要求只用一条select语句

我有个表,有些记录属于部分重复,像根据时间去掉重复记录
比如这个表:

t1                 t2          
小明            2015-06-25
小明            2015-09-21
小红            2015-03-01
小花            2015-03-01
小白            2015-03-01

里面的小明那条记录,我只想保留2015-09-21这条最新的记录。

麻烦的是,我只能用一条select语句,不能把另一条记录删掉。
求解

6个回答

Tiger_Zhao
Tiger_Zhao   Rxr 2016.05.05 16:38
已采纳
SELECT a.*
  FROM table1 a
 WHERE NOT EXISTS (SELECT *
                     FROM table1 b
                    WHERE b.t1 = a.t1
                      AND b.t2 > a.t2)
sgsy_2013
sgsy_2013 回复Tiger_Zhao: 谢谢了。我自己查一下oracle对应的方法
一年多之前 回复
sgsy_2013
sgsy_2013 回复Tiger_Zhao: 我用的是oracle
一年多之前 回复
Tiger_Zhao
Tiger_Zhao 回复sgsy_2013: 如果是 SQL Server 可以用 CTE:;WITH table1 AS (/*复杂的查询*/) 后面跟上面的语句。
一年多之前 回复
sgsy_2013
sgsy_2013 如果我的table1是一个复合的表,这个语句是不是会过长?后面table1 b的时候,是不是又要把table1整个抄一遍?
一年多之前 回复
w172087242
w172087242   Ds   Rxr 2016.05.05 16:45

select * from tablename tn1 where t.t2 = (select max(tn2.t2) from tablename tn2 where tn1.t1=tn2.t1);

tablename是你的表名,
如果有帮助,希望结帖哦。

w172087242
w172087242 回复sgsy_2013: 能帮到你就行
一年多之前 回复
sgsy_2013
sgsy_2013 回复little_how: 哈哈 采纳快了点。我后来各个方法都试了下,自己再修改了下,还是你这个比较适合我
一年多之前 回复
w172087242
w172087242 回复sgsy_2013: 可是没采纳我...
一年多之前 回复
sgsy_2013
sgsy_2013 我最后采用了这个sql。。。 谢谢你了。
一年多之前 回复
tmj3465968
tmj3465968   2016.05.05 16:55

create table tablename as
select t1,max(t2) from tablename group by t1;

sgsy_2013
sgsy_2013 这种方法的问题。如果我我有多列,只是t1有重复其他列不一定,那其他列是不是就显示不了了?
一年多之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.05.05 16:37

根据最新的时间来进行筛选,,

sgsy_2013
sgsy_2013   2016.05.05 16:59

谢谢大家了,只能选一个最佳。。。

yshwaishui
yshwaishui   2016.05.05 17:08

select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

Csdn user default icon
上传中...
上传图片
插入图片