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,一经查实,立即删除!

相关文章

python读取字典元素笔记_Python 学习笔记 - 字典

Python 字典字典是一种无序的、可修改的、可索引的容器。字典使用花括号声明,具有键和值。mydic {name:孙悟空,origin:猴子}print(mydic)结果:{name: 孙悟空, origin: 猴子}访问字典mydic {name:孙悟空,origin:猴子}print(mydic[name])结果&#xff1a…

oracle =1,oracle中的 where 1=1 和where 1 !=1

11 永真&#xff0c; 1<>1 永假。1<>1 的用处&#xff1a; 用于只取结构不取数据的场合例如&#xff1a;create table table_ly_temp tablespace ly_temp asselect * from table_ly where 1<>112建成一个与table_ly 结构相同的表table_ly_temp &#xff0c;但…

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

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

sp_addlinkedserver oracle,sp_addlinkedserver使用方法

Exec sp_droplinkedsrvlogin DBVIP,Null --删除映射(录与链接服务器上远程登录之间的映射)Exec sp_dropserver DBVIP --删除远程服务器链接EXEC sp_addlinkedserverserverDBVIP,--被访问的服务器别名srvproduct,providerSQLOLEDB,datasrc"…

oracle的undo表空间不足,undo表空间不足,ORA-30036 unable to extend segment by ...

一、一次更新或者删除大量数据&#xff0c;这些数据需要保存在undo表空间中(直到提交或回滚后这些undo表空间中的数据才允许被覆盖)&#xff0c;如果undo表空间不足&#xff0c;就会报ORA-30036错误。下面是两种解决办法&#xff1a;1、增加undo表空间大小&#xff0c;或将undo…

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

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

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

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

linux上dig命令,Linux dig命令(示例代码)

dig(Domain Information Groper)&#xff0c;和nslookup作用有些类似&#xff0c;都是DNS查询工具1、dig命令格式dig dnsserver name querytype如果你设置的dnsserver是一个域名&#xff0c;首先通过默认的上连DNS服务器去查询对应的IP地址&#xff0c;然后再以设置的dnsserver…

python实现表格线性回归_Python实现线性回归

一、线性回归原理二、python实现线性回归1.基本矩阵运算pratice1.py:# Author:WYCimport numpy as npfrom numpy.linalg import invfrom numpy import dotfrom numpy import matprint(-------------给定矩阵A,B----------)A np.mat([1,1])print (A:\n,A)B mat([[1,2],[2,3]])…

linux后台启动脚本nohup,linux下后台执行shell脚本nohup

【GSM】GTM900C的应用——短信虽说GSM已经很老旧,但其低廉的价格,非常适合一些需要小数据上网传输和短信等功能的应用场合. 不知道GSM能否像51单片机一样,在低端应用中长久不衰.GTM900C发送短信,支持两种模式,TXT和PD ...iOS UITabBarController的使用UITabBarController 和 UI…

华为4g模块 linux驱动程序,定制Android之4G-LTE模块驱动

定制Android之4G-LTE模块驱动一&#xff0e; 简介本文讲述在Android内核中&#xff0c;添加中国移动4G-LTE制式华为MU909模块驱动&#xff0c;实现通过4G上网业务&#xff0c;电话业务&#xff0c;短信业务。CPU&#xff1a;Samsung 6410Kernel&#xff1a;linux 2.6.36…

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

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

linux下printf语句执行时间,linux下printf中\n刷新缓冲区的疑问(已解决)

#include #include int main(void){ printf("hello world");close(STDOUT_FILENO); return 0;}//什么都不输出12345678910111234567891011#include #include int main(void){ printf("hello world\n");close(STDOUT_FILENO); …

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

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

linux 获取设备树源文件(dts)里描述的资源,Linux 获取设备树源文件(DTS)里描述的资源...

在linux使用platform_driver_register() 注册 platform_driver 时&#xff0c; 需要在 platform_driver 的probe() 里面知道设备的中断号&#xff0c; 内存地址等资源。这些资源的描述信息存放在 resource 数据结构中&#xff0c; 相同的资源存放在一个树形树形数据结构中&…

python无法安装第三方库read time out_解决pip install的时候报错timed out的问题

安装包的时候报错&#xff0c;执行&#xff1a;pip install pyinstaller问题&#xff1a;File "c:\python\python35\lib\site-packages\pip\_vendor\requests\packages\urllib3\response.py", line 357, in streamdata self.read(amtamt, decode_contentdecode_cont…

嵌入式linux文件系统类型,嵌入式Linux 的Cramfs 根文件系统配置的解决方案

当系统启动并执行到系统初始化脚本/etc/init.d/rcS 时&#xff0c;mount 命令将/mnt/yaffs 目录挂载 为ramfs 类型的随机存储文件系统&#xff0c;并在此文件系统上建立Qtopia 和Qtopia/tmp 目录[5]&#xff0c; /Qtopia/tmp 目录即为应用程序可能对文件系统进行写操作的临时文…

python nlp data_Python nlpaug包_程序模块 - PyPI - Python中文网

NLPAUG这个python库帮助您为机器学习项目增加nlp。访问此简介了解Data Augmentation in NLP。Augmenter是增广的基本元素&#xff0c;而Flow是将多个增广器组合在一起的管道。起动指南增强器TargetAugmenterActionDescriptionCharacterRandomAuginsertInsert character randoml…

Linux创始人数据结构,Linux 通用数据结构说明

device_driver include/linux/device.h struct device_driver {const char * name; /* 驱动名称 */struct bus_type * bus; /* 总线类型 */struct completion unloaded; /* 卸载事件通知机制 */ struct kobject kobj; /* sys 中…

python在浏览器运行一片空白_Webdriver启动Firefox浏览器后,页面显示空白

在使用pycharm码代码时编译总是出错&#xff0c;后来验证发现浏览器启动后出现问题。白白耗了我2个小时。我把我的解决方案写出来&#xff0c;希望对大家有帮助。1.现象&#xff1a;起初安装的时候总是能正常运行&#xff0c;有一天突然发现Webdriver打开fFirefox浏览器后&…