问题:重新同步套餐功能 把日志中套餐代码相同,实体相同的最高版本号的记录查询出来。有个日志表 mis_package_syn_log 里面有(code(套餐代码), version(版本号), package_id, orgid(实体), id, scrq)
各位大侠给个思路吧!

解决方案 »

  1.   

    用oracle的分析函数 rank 好像可以实现你的需求吧
      

  2.   

    你可以试试下边的语句select * from (select rank() over(partition by t.code, t.orgid order by t.version desc) rk, t.* from mis_package_syn_log t)
    where rk = 1;
      

  3.   


    谢谢三楼的精彩回答,但是我没有这样写过sql语句,你能帮忙解释下不?
      

  4.   

    我按照你说的查询了下不是这个结果呀!比如说 15459这个code代码相同 实体相同的最高版本号最高版本号是3但是同时出现了2,1版本都出来了??这是怎么回事呢?
      

  5.   

    我按照你说的查询了下不是这个结果呀!比如说 15459这个code代码相同 实体相同的最高版本号最高版本号是3但是同时出现了2,1版本都出来了??这是怎么回事呢?
      

  6.   

    partition by后边是跟的分组的字段
    order by后边跟的是排序的字典
    rank() over(partition by t.code, t.orgid order by t.version desc) rk就是按照code和orgid进行分组,在每个分组中按version进行倒序排列给每条数据加上一个等级。你执行select rank() over(partition by t.code, t.orgid order by t.version desc) rk, t.code, t.orgid, t.version from mis_package_syn_log t的时候,可以看看 rk、code、orgid的关系
      

  7.   

    select * from (select rank() over(partition by t.code, t.orgid order by t.version desc) rk, t.* from mis_package_syn_log t)
    where rk = 1;
    这个语句code和orgid全部相同的话应该只会出现一条数据啊。
      

  8.   

    查出来了,谢谢你哦,但是oracle的函数我还是不大懂,得学习学习,可以向你请教吗?