oracle top用法


ROWNUM 是查询之后产生的编号,比查询滞后,所以如果用大于号,则会一条一条数据全部都过滤掉。

SELECT * FROM torderdetail a WHERE ROWNUM <= 10




SELECT * FROM (SELECT a.*, ROWNUM rn FROM torderdetail a) WHERE rn >= 10 AND rn <= 20




Row_number() over()这个分析函数是从9I开始提供的,一般的用途和rownum差不多。


  一般写法row_number() over( order by order_date desc) 生成的顺序和rownum的语句一样,效率也一样(对于同样有order by 的rownum语句来说),所以在这种情况下两种用法是一样的。


  而对于分组后取最近的10条纪录,则是rownum无法实现的,这时只有row_number可以实现,row_number() over(partition by 分组字段 order by 排序字段)就能实现分组后编号,比如说要取近一个月的每天最后10个订单纪录


SELECT *
FROM (
SELECT a.*,ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC) rn
FROM torderdetail a)

WHERE rn <= 10

分组top:

如果只想得到每个公司最大年份,最大月份数据。(猜测你的需求)
partition by unitname order by year desc,period desc


partition分组函数year,period desc与year desc,period desc 不一样


如果用year,period desc不行,但是分别year desc,period desc 就搞定了,谢谢。
下面是完整的代码
select *
  from (select UNITCODE,   unitname,     year,   period,     num1,
               row_number() over(partition by UNITNAME order by YEAR desc,period desc) mm


          from (select BD_CORP.UNITCODE,   bd_corp.unitname,   gl_voucher.year,   gl_voucher.period,   count(*) num1
                  from gl_voucher, bd_corp
                 where bd_corp.pk_corp = gl_voucher.pk_corp
                      and gl_voucher.dr='0'
                 group by BD_CORP.UNITCODE,
                          bd_corp.unitname,
                          gl_voucher.year,
                          gl_voucher.period)
        
        )
where mm = 1
ORDER BY UNITCODE;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值