SQL技巧

您所在的位置:网站首页 mysql有没有row_number SQL技巧

SQL技巧

2023-09-03 18:16| 来源: 网络整理| 查看: 265

在sql server中 , 有一个很常用的窗口函数row_number

一般写法是这样的

1 select * from 2 ( 3 select *,rn=ROW_NUMBER()over(partition by column_a order by column_b desc) from table_a 4 ) a where a.rn=1

row_number函数常用于分组取最值的情况下

partition by 相当于group by 指定按照哪个字段进行分组

但是由于sql的执行顺序, 当用row_number函数的时候 不得不对于那些排序结果不等于1的  即rn1的行记录在内层查询中也进行排序和返回

而且是所有的表记录都会参与分组排序 然后才能在外层查询中再筛选出rn=1的行记录来

这导致row_number函数的效率会很低 尤其当表很大的时候

 

 

下面考虑这样一个实际问题

在一张股票的每日日行情表中, 如何计算出每天的50日均成交量呢

行情表名为hk_StockHistoricalDaily 

表主要字段介绍: 股票内码secid , 成交量volume , 交易日期date ,

需要计算的字段50日均成交量avgvolume50

select secid,avgvolume50=case when count(volume)=50 then round(avg(volume),0) end from ( select secid,volume,rn=ROW_NUMBER()over(partition by secid order by date desc) from hk_StockHistoricalDaily where volume is not null )a where rn


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3