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.pswp.cn/news/534791.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534791.shtml
英文地址,請注明出處:http://en.pswp.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瀏覽器后&…