qq_28627123
男人要像阳光
采纳率0%
2017-03-16 01:53 阅读 1.6k

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

5

我有一个表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条回答 默认 最新

  • HackAge4619 写给初学者的几封信 2017-03-16 02:38

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

    点赞 1 评论 复制链接分享
  • u010566427 欧阳枫歌 2017-03-17 09:24

    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);

    点赞 1 评论 复制链接分享
  • ios_king 果冻剑客 2017-03-16 03:23

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

    点赞 评论 复制链接分享
  • baconsphool RalfHo 2017-03-20 05:28

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

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

    点赞 评论 复制链接分享
  • u011217433 小蜗牛_xxx 2017-03-21 08:21

    可以用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;

    点赞 评论 复制链接分享

相关推荐