oracle数据库,多条数据中有一个字段(name)有重复记录,但是其他字段不重复,怎么才能去重查询.

例如:
ID NAME AGE
1 tom 22
2 tom 23
3 tom 24
4 lily 22
5 lily 23

我希望查询之后的结果为:
ID NAME AGE
3 tom 24
5 lily 23
求大神们帮助下
select * from TABLE where ID in(select max(t.ID) from TABLE t group by t.NAME)
大概就是这样吧

CREATE TABLE #test (
  ID    int,
  name  varchar(10),
  age   int
);
go


-- 用于测试 楼主的原始数据.
INSERT INTO #test
SELECT  1, 'tom',    22    UNION ALL
SELECT  2, 'tom',    23    UNION ALL
SELECT  3, 'tom',    24    UNION ALL
SELECT  4, 'lily',   22    UNION ALL
SELECT  5, 'lily',   23;

-- 用于测试 年龄不是按照大小顺序
INSERT INTO #test
SELECT  101, '张三',    23    UNION ALL
SELECT  102, '张三',    22    UNION ALL
SELECT  103, '张三',    21;

GO


-- 楼主的SQL
select * from #test where ID in(select max(t.ID) from #test t group by t.NAME)
GO

ID          name       age
----------- ---------- -----------
          3 tom                 24
          5 lily                23
        103 张三                  21

(3 行受影响)




-- 方法1:
SELECT
  *
FROM
  #test main
WHERE
  NOT EXISTS( select 1 FROM #test sub where main.name=sub.name AND main.age<sub.age);
GO

ID          name       age
----------- ---------- -----------
          3 tom                 24
          5 lily                23
        101 张三                  23

(3 行受影响)


-- 方法2:
select * from #test 
where  name + '.' + CAST(age as char) IN (SELECT name + '.' + CAST(MAX(age) as char) FROM #test GROUP by name);
GO

ID          name       age
----------- ---------- -----------
          3 tom                 24
          5 lily                23
        101 张三                  23

(3 行受影响)

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-31

distinct去重复数据用

select id,distinct(name),age from table

参考http://baike.baidu.com/view/995053.htm

第2个回答  2013-05-31
楼下的回答很幼稚 测试了吗?
我帮你写下 把表名换一下就可以了
select max(ID) ID, name,max(age) age from tbname
group by name

为什么把问题搞的那么复杂 就这么简单的事情 写的越多越好吗?
楼主的那个方法也可以 (应该是巧合 如果你的年龄不是按照大小顺序的 你那个结果查询的就不是你要的)
第3个回答  2013-05-31
select id, name, max(age)
from table
group by name

很久不写SQL,语法都忘了。。。
GROUP BY 只能取两个字段,ID应该是主键吧?
如果是ORACLE 可以用ROW_NUMBER试试。
select * from (select ID ,NAME ,AGE,row_number() over(partition by NAME order by ID,AGE DESC) rn from TABLE ) where rn=1
我这没环境,要是有什么幼稚的错误自己改改吧,思路应该是这样。

你的追问是名字分组取出最大的ID,因为是唯一主键所以写的没错。如果你想把年龄作为条件加进去你的写法就有问题了。
第4个回答  2013-05-31
SELECT MAX(A.ID),A.NAME,B.MAG
FROM TABLE A,
(SELECT NAME,MAX(AGE) MAG FROM TABLE GROUP BY NAME) B
WHERE
A.NAME=B.NAME
GROUP BY A.NAME,B.MAG
你试下

oracle数据库,多条数据中有一个字段(name)有重复记录,但是其他字段不重 ...
CREATE TABLE #test ( ID int, name varchar(10), age int);go-- 用于测试 楼主的原始数据.INSERT INTO #testSELECT 1, 'tom', 22 UNION ALLSELECT 2, 'tom', 23 UNION ALLSELECT 3, 'tom', 24 UNION ALLSELECT 4, 'lily', 22 UNION ALL...

oracle数据库,多条数据中有一个字段(name)有重复记录,但是其他字段不重 ...
如果随便取一条的话,select * from table where name='' where rownum=1;就返回一条

如何解决Oracle数据库中重复数据的方法步骤
先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。上面的语句会把所有重复的全都删除,在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。下面是查询重复数据的一个...

Oracle 如何查找并删除重复记录
查找基于多个字段的重复记录,可以基于name和email字段进行分组统计,找出同时name和email都相同的重复数据。使用分析函数提高性能和可读性。通过count()分析函数找出字段重复次数,并保留原表数据,避免二次扫描。只返回次数大于1的记录即可。删除重复记录时,通常需要保留其中一条数据。使用子查询配合逻辑条件,...

Oracle数据库重复数据删除的几种方法
重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。一、删除部分字段重复数据先来谈谈如何查询重复的数据吧。下面语句可以查询出...

oracle 查询所有字段,某字段重复只显示一条
具体操作步骤如下:一,oracle数据库,情景:表(客户-业务员)中数据都不完全重复,但是可能多条数据其中某些字段重复。我想要取得表中符合条件的记录,但是这些记录中的客户id和客户名称发生重复的话只能留一个。二,如上图我想找出“冯冬梅”负责的所有客户,但是由于她属于多个部门,此表存储的是不同...

oracle数据库中怎么能避免相同的数据插入数据库多遍?sql语句怎么处理呢...
回答:INSERT INTO T_LOG ( LOG_ID ,LOG_NAME ) VALUES ( T_LOG.nextval strName ); T_LOG就是sequence的名字 不是将该字段省略~而是在插入值的时候

oracle某个字段有重复数据,如何删除多余数据只保留1条
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断。2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录。3、查找表中多余的重复记录(多个字段)。4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录。5、查找表中多余的...

oracle如何删除重复数据oracle如何删除重复数据只保留一条
重复数据可能有两种情况。第一个是时间表中只有部分字段相同,第二个是两行记录完全相同。Oracle数据库重复数据删除技术具有以下优势:更大的备份容量、持续的数据验证、更高的数据恢复服务水平、方便的备份数据容灾。首先,删除字段中的一些重复数据。先说如何查询重复数据。以下语句可以找出哪些数据是重复的:...

oracle查询出来的数据如何消除重复数据
oracle查询出来的数据消除重复数据的具体步骤如下:1、首先我们查看表中重复的数据。2、然后我饿美女使用distinct去除函数查询出去掉重复后的数据。3、然后我们创建新表把去掉重复的数据插入到新表中。4、最后使用truncate清空原表中的数据。5、再向原表中插入新表中重复的数据,即可达到去重复数据的效果。

相似回答