SQL技巧 |
您所在的位置:网站首页 › mysql有没有row_number › SQL技巧 |
在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=1row_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 |