日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle分析函数-keep(dense_rank first/last)

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle分析函数-keep(dense_rank first/last) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
select * from criss_sales where dept_id = 'D02' order by sale_date ;

此時有個新需求,希望查看部門 D02 內,銷售記錄時間最早,銷售量最小的記錄。

即希望得到這樣的信息
D02 ? ? 2014/3/6 ? ?G01 ? ? ? ? ? ? ? ?430

這樣,就需要用keep(dense_rank first/last)來幫助處理

selectdept_id,min(sale_cnt)keep ( dense_rank first order by sale_date) min_early_date from criss_sales where dept_id = 'D02' group by dept_id;

關于使用keep(dense_rank first/last) 會有一些疑問
1.keep(dense_rank first/last) 這句話的含義是什么?
2.為什么要使用min ?
3.為什么使用dense_rank ? rank不可以嗎?

關于問題1:
? keep 字面意思就是'保持',也就是說保存滿足keep()括號內條件的記錄
? ? ? ?這里我們應該可以想象到,會有多條記錄的情況,即存在多個last或first的情況)
? dense_rank 是排序策略
? first/last 是篩選策略
??
關于問題2:
使用min的原因是讓最后得到的結果唯一,因為有時會存在多個last或first的情況。
例子中:

DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT ------- ----------- ---------- ----------- D02 2014/3/6 G00 500 D02 2014/3/6 G01 430

這兩條記錄,同時滿足keep的條件,通過 min(sale_cnt) 我們就得到了唯一的值?

D02 2014/3/6 G01 430

下面我們加上MAX 與 MIN對比下:

selectdept_id,min(sale_cnt)keep ( dense_rank first order by sale_date) min_early_date,max(sale_cnt)keep ( dense_rank first order by sale_date) max_early_date from criss_sales where dept_id = 'D02' group by dept_id;

很顯然 max 取到了兩條記錄的較大值!

關于問題3:
先看一下換成rank的情況吧

selectdept_id,min(sale_cnt)keep ( rank first order by sale_date) min_early_date,max(sale_cnt)keep ( rank first order by sale_date) max_early_date from criss_sales where dept_id = 'D02' group by dept_id; ORA-02000: 缺失 DENSE_RANK 關鍵字?

換成rank以后直接報錯了,至于原因,我的理解是rank不能表示記錄排序的相對順序
? 例如: 記錄 ? rank ? dense_rank
? ? ? ? ? 100 ? ?1 ? ? 1
? ? ? ? ? 100 ? ?1 ? ? 1
? ? ? ? ? 95 ? ? 3 ? ? 2
第三條記錄與第一條和第二條記錄的相對位置應該差1,但是用rank無法表示這一點。
感覺rank應該也能實現first/last的篩選,但是oracle似乎并沒允許用rank這樣去做。

轉載于:https://www.cnblogs.com/sooner/p/7729708.html

總結

以上是生活随笔為你收集整理的Oracle分析函数-keep(dense_rank first/last)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。