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

例如:IDNAMEAGE1tom222tom233tom244lily225lily23我希望查询之后的结果为:IDNAMEAGE3tom245lily23求大神们帮助下... 例如:
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)
大概就是这样吧
展开
 我来答
匿名用户
2013-05-31
展开全部
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 行受影响)
bzb0518
2013-05-31 · 超过18用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:49.3万
展开全部

distinct去重复数据用

select id,distinct(name),age from table

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
17号观察室
2013-05-31 · TA获得超过5730个赞
知道大有可为答主
回答量:3666
采纳率:66%
帮助的人:1368万
展开全部
楼下的回答很幼稚 测试了吗?
我帮你写下 把表名换一下就可以了
select max(ID) ID, name,max(age) age from tbname
group by name

为什么把问题搞的那么复杂 就这么简单的事情 写的越多越好吗?
楼主的那个方法也可以 (应该是巧合 如果你的年龄不是按照大小顺序的 你那个结果查询的就不是你要的)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
满地图找牙
2013-05-31 · TA获得超过349个赞
知道小有建树答主
回答量:404
采纳率:100%
帮助的人:220万
展开全部
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,因为是唯一主键所以写的没错。如果你想把年龄作为条件加进去你的写法就有问题了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晕这都有人起了
2013-05-31 · TA获得超过191个赞
知道小有建树答主
回答量:179
采纳率:0%
帮助的人:107万
展开全部
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
你试下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式