Oracle数据库表中数据去重问题 5C

我有一个表message,里面有一些字段,我想将字段a相同的数据都去重只取最新的一条(create_time)例如:

字段id 字段a 字段b 字 段c
1 5 13:50 wea
2 6 11:50 wdd
3 5 15:30 eaaa

**我想得到的数据是:
2            6        11:50      wdd
3            5        15:30      eaaa
**

就是这样通过一个去重只拿到根据a字段筛选过的所有数据(所有字段)

5个回答

这不是去重问题,这是选出时间最近的一个(也就是时间值最大的MAX(字段b))

SQL语句较复杂:
select *
from message t1
where exists
(select (1) from message t2 group by t2.字段a having count(1) > 1
and t1.id in (select max(t3.create_time) from message t3 group by t3.字段a having count(1) > 1))
or t1.字段a in (select t4.字段a from message t4 group by t4.字段a having count(1) = 1);

分一下组,然后取时间最大的就行

select * from message
where (a,b) in
(select a,max(b) from message
group by a)

不知道这样是否符合你的需求

可以用oracle里面的分析函数row_number()over()

select id,a,b,c from (
select id,a,b,c,row_number()over(partition by a order by b desc) RN
from message)
where RN=1;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!