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

<!– more –>

  • 其中下面代码含义是将时间在有效时间段内(to_char(sysdate, 'yyyymmdd-hh24:mi:ss') &lt;= 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') &lt;= validuntilTime
        and code in
    ('a','b','c')
    ) 
  • 上面执行结果是类似下面表格效果
CODECOL1COL2RANK
axxxxxx1
axxxxxx2
axxxxxx3
bxxxxxx1
bxxxxxx2
cxxxxxx1
cxxxxxx2
cxxxxxx3
cxxxxxx4
  • 然后将其作为子查询,在外层套一个select * from (上面的代码) where rank = 1就能将每一组内的一条最新的记录查询出来了
    原文作者:下次用sf
    原文地址: https://segmentfault.com/a/1190000018775701
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞