oracletop⽤法
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个订单纪录oracle中trunc函数用法
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, ar, 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,
ar,
gl_voucher.period)
)
where mm = 1
ORDER BY UNITCODE;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论