Oracle分组查询

分组查询,且只取每一组内的一条最新的记录

需求:查询 code 为a,b,c且在有效时间段内的每个code最新的一条记录(code不是主键)
select * from (select code
    col1,
    col2,
    row_number() over (partition by code order by time desc) rank
    from t_order
    where type= '107'
    and to_char(sysdate, 'yyyymmdd-hh24:mi:ss') <= validuntilTime
        and code in
    ('a','b','c')
    ) where rank = 1
  • 其中下面代码含义是将时间在有效时间段内(to_char(sysdate, 'yyyymmdd-hh24:mi:ss') <= validuntilTime)且code为a,或b,或c(code in('a','b','c'))的所有记录根据code分组(partition by code),且组内的顺序是根据时间的逆序排列(order by time desc
(select code
    col1,
    col2,
    row_number() over (partition by code order by time desc) rank
    from t_order
    where type= '107'
    and to_char(sysdate, 'yyyymmdd-hh24:mi:ss') <= validuntilTime
        and code in
    ('a','b','c')
    ) 
  • 上面执行结果是类似下面表格效果
CODE COL1 COL2 RANK
a xxx xxx 1
a xxx xxx 2
a xxx xxx 3
b xxx xxx 1
b xxx xxx 2
c xxx xxx 1
c xxx xxx 2
c xxx xxx 3
c xxx xxx 4
  • 然后将其作为子查询,在外层套一个select * from (上面的代码) where rank = 1就能将每一组内的一条最新的记录查询出来了
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,049评论 0 13
  • 我现在对你的喜欢,比昨天多一点点,比明天少一点点; 分组查询主要使用的是group by语句。技巧:可以吧sele...
    weiyu_you阅读 729评论 0 0
  • 上面的代码的意思就是呢,我们利用partition进行分组,类似于group by,可以对多个列进行分组,然后我们...
    zhangxu0636阅读 1,092评论 0 0
  • 分组取最大值 select * from 表 where (序号,名称) in (select max(序号),名...
    feiyingmm阅读 538评论 0 1
  • 1.埋点是做什么的 2.如何进行埋点 3.埋点方案的设计 近期常被问到这个问题,我担心我的答案会将一些天真烂漫的孩...
    lxg阅读 2,028评论 0 1