oracle sql last_value,図でイメージするOracle DatabaseのSQL全集 第3回 分析関数

指定したソートキーでの、最初の行の値を求めるのが、First_Value関数。

指定したソートキーでの、最後の行の値を求めるのが、Last_Value関数。

指定したソートキーでの、(Row_Numberな順位が)n番目の行の値を求めるのが、nth_Value関数となります。

Oracle11gR2でnth_Value関数が追加されました。

create table FirstLastSample(ID,SortKey,Val) as

select 111,1,20 from dual union all

select 111,3,60 from dual union all

select 111,9,40 from dual union all

select 222,2,90 from dual union all

select 222,4,70 from dual union all

select 333,5,80 from dual;

IDごとでSortKeyの昇順で、最初の行のValと最後の行のValを求めてみます。

select ID,SortKey,

First_Value(Val)

over(partition by ID order by SortKey) as FirVal,

Val,

Last_Value(Val)

over(partition by ID order by SortKey

Rows between Unbounded Preceding

and Unbounded Following) as LastVal

from FirstLastSample;

出力結果

ID SortKey FirVal Val LastVal

--- ------- ------ --- -------

111 1 20 20 40

111 3 20 60 40

111 9 20 40 40

222 2 90 90 70

222 4 90 70 70

333 5 80 80 80

SQLのイメージは下記です。partition by IDで、IDごとに区切る赤線を引いて、First_Value関数で青線、Last_Value関数で黄緑線を引いてます。

format,png

First_ValueとLast_Valueのignore nulls

ある条件を満たす、最初や最後の行の値を求める

Oracle10gR1から、First_Value関数とLast_Value関数で、ignore nullsを指定できます。

Oracle11gR2からは、Lag関数とLead関数でもignore nullsを指定できます。

Last_Value(値 ignore nulls) over句 が基本的な使い方ですが、Last_Value(case when 条件 then 値 end ignore nulls) over句 というふうに、case式を組み合わせて使うほうが多いです。

create table IgnoreNullsSample1(ID,SortKey,Val) as

select 555,1, 600 from dual union all

select 555,3, 300 from dual union all

select 555,5,null from dual union all

select 555,9,null from dual union all

select 666,2, 400 from dual union all

select 666,3,null from dual union all

select 666,4,null from dual union all

select 666,5, 600 from dual union all

select 777,1,null from dual union all

select 777,3,null from dual union all

select 777,5, 900 from dual union all

select 777,6,null from dual;

IDごとでSortKeyの昇順で、最初のnullでないValと、最後のnullでないValを求めてみます。

select ID,SortKey,

First_Value(Val ignore nulls)

over(partition by ID order by SortKey

Rows between Unbounded Preceding

and Unbounded Following) as FirVal,

Val,

Last_Value(Val ignore nulls)

over(partition by ID order by SortKey

Rows between Unbounded Preceding

and Unbounded Following) as LastVal

from IgnoreNullsSample1;

出力結果

ID SortKey FirVal Val LastVal

--- ------- ------ ---- -------

555 1 600 600 300

555 3 600 300 300

555 5 600 null 300

555 9 600 null 300

666 2 400 400 600

666 3 400 null 600

666 4 400 null 600

666 5 400 600 600

777 1 900 null 900

777 3 900 null 900

777 5 900 900 900

777 6 900 null 900

SQLのイメージは下記です。partition by IDで、IDごとに区切る赤線を引いて、

First_Value関数で青線、Last_Value関数で黄緑線を引いてます。

format,png

ignore nullsの、別の使い方として、その行以降で最初のnullでないValや、その行までで最後のnullでないValを求めるといった使い方もあります。

create table IgnoreNullsSample2(SortKey,Val) as

select 1,null from dual union all

select 2, 500 from dual union all

select 3,null from dual union all

select 5,null from dual union all

select 6, 300 from dual union all

select 10,null from dual union all

select 11,null from dual union all

select 12, 700 from dual union all

select 13,null from dual;

select SortKey,

First_Value(Val ignore nulls)

over(order by SortKey

Rows between current row

and Unbounded Following) as FirVal,

Val,

Last_Value(Val ignore nulls)

over(order by SortKey) as LastVal

from IgnoreNullsSample2;

出力結果

SortKey FirVal Val LastVal

------- ------ ---- -------

1 500 null null

2 500 500 500

3 300 null 500

5 300 null 500

6 300 300 300

10 700 null 300

11 700 null 300

12 700 700 700

13 null null 700

SQLのイメージは下記です。First_Value関数で青線、Last_Value関数で黄緑線を引いてます。

format,png

Rows 2 Preceding

移動累計を求める (行数を指定)

Rows 2 Precedingといった指定は、移動平均や移動累計を求める時などに使われます。

create table MoveSumSample(SortKey,Val) as

select 1, 10 from dual union all

select 2, 20 from dual union all

select 5, 60 from dual union all

select 7,100 from dual union all

select 8,200 from dual union all

select 9,600 from dual;

SortKeyの昇順での、前の2行と自分の行を加算対象とした移動累計を求めてみます。

select SortKey,Val,

sum(Val) over(order by SortKey Rows 2 Preceding) as moveSum

from MoveSumSample;

出力結果

SortKey Val moveSum

------- --- -------

1 10 10

2 20 30

5 60 90

7 100 180

8 200 360

9 600 900

SQLのイメージは下記です。sum(Val) over(order by SortKey Rows 2 Preceding)で黄緑線を引いてます。

format,png

Range 2 Preceding

移動累計を求める (ソートキーの範囲を指定)

Range 2 Precedingといった指定は、移動平均や移動累計を求める時などに、使われます。

Rows 2 Precedingとの違いは、Rowsが行数の指定なのに対して、Rangeはソートキーの範囲の指定という点です。

SortKeyが自分の行より2小さい行から、自分の行までを加算対象とした移動累計を求めてみます。

select SortKey,Val,

sum(Val) over(order by SortKey Range 2 Preceding) as moveSum2

from MoveSumSample;

出力結果

SortKey Val moveSum2

------- --- --------

1 10 10

2 20 30

5 60 60

7 100 160

8 200 300

9 600 900

SQLのイメージは下記です。sum(Val) over(order by SortKey Range 2 Preceding)で黄緑線を引いてます。

format,png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业信息化投入中咨询服务_全过程工程咨询服务核心价值是什么

建筑行业服务现状传统建设工程的目标、计划、控制都以参与单位个体为主要对象,项目管理的阶段性和局部性割裂了项目的内在联系,导致项目管理存在明显的管理弊端,这种模式已经与国际主流的建设管理模式脱轨。“专而不全”、“多小散”企业的参…

交流信号叠加直流偏置_放大器偏置电流Ib需要完整的直流回路

多数工程师对于放大器偏置电流参数并不陌生,它是导致放大器电路产生直流噪声的又一重要影响因素。因为偏置电流经过输入端电阻网络会形成一个失调电压源,再通过电路的噪声增益影响输出直流噪声。所以工程师会注重电阻网络的匹配,降低偏置电流…

teamviewer类似软件_TeamViewer系统后台被黑客组织APT攻破,请注意防范

TeamViewer事件10月11日,深圳市网络与信息安全信息通报中心发布了一份编号为“2019029”的名为《关于TeamViewer客户端被远程控制的紧急通报》文件,文件指出目前知名远程办公工具TeamViewer已经被境外黑客组织APT41攻破,提醒企业组织做好防护…

软件测试用例_软件测试用例设计实战场景法

不点蓝字,我们哪来故事? 目录场景法扩展例子场景法介绍影子场景法用例设计举例场景法设计用例步骤和表示场景法举例 总结 场景法的注意点场景法影子本来想直接跳过场景法的,今天群友提出问题:1、面试官问:场景…

树莓派摄像头_Arducam 8MP重磅来袭,为树莓派4B构建完全同步的双摄像头方案~

大家好,我是小月月。双目立体景深一直是很热门的项目,最近已经有不少小伙伴学会在树莓派上插两个USB摄像头了,这个方案可以识别静态场景中各个物体的距离远近。但是两个USB摄像头捕获到的两组图像序列的时间并不是严格同步的,对运…

稀疏自编码器_自编码(AutoEncoder)模型及几种扩展之二

4. 稀疏自编码假设我们只有一个没有类别标签的训练样本集合{x(1),x(2)...},一个自编码神经网络就是一种非监督学习算法,它使用BP算法,并将目标值设为: y(i)x(i)。我们的目标是希望得到hW,b(X)≈x。用aj(2)(x)表示输入向量x对隐藏层单元j的激活…

linux x86 关机 过程,linux在x86上的中断处理过程(详细)

Linux在x86上的中断处理过程一:引言在Intel的文档中,把中断分为两种。一种是异常,也叫同步同断。一种称之为中断,也叫异常中断。同步中断指的是由CPU控制单元产生,之所以称之为同步,是因为只有一条指令执行完毕后才会发出中断。例如除法运算中,除数为零的时候,就会产…

linux 显卡转码,ffmpeg用GPU转码

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?有些视频编码太屌,播放起来对CPU消耗巨大,而在电视上或者电视盒子上看视频,编码就需要合适,楼主用的FireTV Stick&a…

c语言课程设计作业五子棋,C语言课程设计报告五子棋游戏课程设计

C语言课程设计报告五子棋游戏课程设计 C语言课程设计报告_五子棋游戏-课程设计C语言课程设计报告_五子棋游戏|c语言程序代码编程小程序设计|c语言课程设计报告课程案例**********************************************************//* 本程序在Turbo C或Borland C下编译通过 */…

redis内存淘汰和持久化_redis 持久化

一、RDB持久化(一)、RDB介绍可以在指定的时间间隔内生成数据集的 时间点快照(point-in-time snapshot),新快照会覆盖老快照(二)、优点压缩格式,恢复速度快,适合于用做备份…

最新变态传奇android,新开变态传奇单职业

新开变态传奇单职业这款传奇手游中拥有这极为丰富的游戏玩法,玩家既可以进入各种副本中,挑战那些强大的副本boss,也可以和自己的兄弟好友们一起组队,前往各种跨服战场,和全服的高手玩家们一起进行最激烈的战斗。游戏中…

android手机微信收藏功能实现,Android模仿微信收藏文件的标签处理功能

最近需要用到微信的标签功能(如下图所示)。该功能可以添加已有标签,也可以自定义标签。也可以删除已编辑菜单。研究了一番。发现还是挺有意思的,模拟实现相关功能。该功能使用类似FlowLayout的功能。Flowlayout为一个开源软件(https://github.com/ApmeM/…

android 电话号码标记,强化电话标记功能 360手机卫士3.0安卓版体验

作为“房产商”,上海仁恒置地集团营销总监姚伟示通常每天也要接到20个左右房产或其他推销电话。“现在已经形成了一个机械的对应方式,对于此类推销电话,很多人包括我自己已经麻木了。”针对这种情况,360手机卫士发布了3.0.0正式版…

android 左滑按钮,android开发类似微信列表向左滑动按钮操作

话不多说,直接上代码,有详细的注释的。layout布局中:主要是跟大家说一下listview怎么写:android:id"id/pull_refresh_viewId"android:layout_width"match_parent"android:layout_height"match_parent&qu…

向量表示 运动抛物线_流动的美丽函数——抛物线浅谈

事先说明:笔者初三,如在叙述中有不严谨的地方,还请诸位指出,自当感激不尽。(本文默认受众对象为初高中生,因此抛物线一律采取了yax的形式,高中的同学们可以应用旋转矩阵把它变到y2px的形式QAQ笔…

android 获取已安装 错误代码,android获取手机已经安装的app信息

Android获取手机已安装APP(系统/非系统)效果图主体代码private ListView mlistview;private ListpackageInfoList;private ListapplicationInfoList;private MyAdapter myAdapter;private PackageManager pm;Overrideprotected void onCreate(Bundle savedInstanceState) {supe…

android与ios ui切图关系,APP-IOS与Android界面设计与切图

做一全套的APP设计,流程是:1、界面设计:设计IOS界面;设计Android界面。2、切图:切IOS的2倍图和3倍图;切Android的hdpi,xhdpi,xxhdpi这三个尺寸的图。3、标注:以px为单位标注IOS界面的尺寸&#…

android app应用后台休眠,安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行...

原标题:安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行安卓手机锁屏后,很多程序就会自动关闭,实际上,这是安卓手机的一种保护机制。为了使系统能够流畅稳定的运行以及更加省电,它都会在手机锁…

linux和windows和鸿蒙,linux很好,但为何大家都用Win,鸿蒙系统站错阵营了吗?

原标题:linux很好,但为何大家都用Win,鸿蒙系统站错阵营了吗?由目前已知信息可知,华为“鸿蒙系统”很可能基于linux开源程序搭建,这个特点与苹果微软由很大不同。苹果手机目前主要使用Objective-C程序语言开…

pos共识机制_OK区块链60讲 | 第17集:什么是PoS共识机制

什么是PoS共识机制https://www.zhihu.com/video/1196092110837805056《OK区块链60讲》是由OKEx&新浪科技联合出品的区块链科普动画视频,针对区块链零基础用户,通过系列文章、科普动画等形式,从概念、技术、应用等角度,…