使用分析函式實現累加和移動平均
--測試表
create table users
as
select sysdate-1000+dbms_random.value*1000 as crt_date
from dual
connect by level<10000;
--累積
SELECT crt_date,
cnt,
SUM(cnt) over(ORDER BY crt_date RANGE unbounded preceding)
FROM (SELECT trunc(crt_date, 'DD') crt_date, COUNT(*) cnt
FROM users
GROUP BY trunc(crt_date, 'DD'))
ORDER BY crt_date;
--自然周平均
--trunc(date,'D'),date所在周的第一天(週日)
with v as(select trunc(to_date('20000101', 'YYYYMMDD'),'D') t0 from dual)
SELECT crt_date,
cnt,
round((crt_date - v.t0) / 7) w,
AVG(cnt) over(PARTITION BY(round((crt_date - v.t0) / 7)))
FROM (SELECT trunc(crt_date, 'DD') crt_date, COUNT(*) cnt
FROM users
GROUP BY trunc(crt_date, 'DD')),v
ORDER BY 1;
--7天為週期的移動平均
--如果日期不連續,使用rows between 有問題,應該使用 range between
SELECT crt_date,
cnt,
AVG(cnt) over(ORDER BY crt_date RANGE BETWEEN 3 preceding AND 3 following)
FROM (SELECT trunc(crt_date, 'DD') crt_date, COUNT(*) cnt
FROM users
GROUP BY trunc(crt_date, 'DD'))
ORDER BY 1;
--自然月平均
SELECT crt_date, cnt, AVG(cnt) over(PARTITION BY trunc(crt_date, 'MM'))
FROM (SELECT trunc(crt_date, 'DD') crt_date, COUNT(*) cnt
FROM users
GROUP BY trunc(crt_date, 'DD'))
ORDER BY 1;
--半年移動平均
SELECT crt_date,
cnt,
AVG(cnt) over(ORDER BY crt_date RANGE BETWEEN(crt_date - add_months(crt_date, -3)) preceding AND (add_months(crt_date, 3) - crt_date) following)
FROM (SELECT trunc(crt_date, 'DD') crt_date, COUNT(*) cnt
FROM users
GROUP BY trunc(crt_date, 'DD'))
ORDER BY 1;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-696985/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL分析函式實現MySql函式
- 時間序列分析(一)--移動平均
- 函式節流、函式防抖實現原理分析函式
- js函式add(1)(2)(3)(4)...實現無限極累加原理解析JS函式
- 手把手教系列之移動平均濾波器實現
- (函式)實現strstr函式函式
- 使用函式式實現觀察者模式模式函式模式
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- 13、MySQL Case-MySQL分析函式實現MySql函式
- 用ORACLE分析函式實現行列轉換Oracle函式
- 如何使用OO和函式式兩個方法實現重構? - DZone函式
- 不使用日期函式實現ADD_MONTHS函式功能函式
- 使用函式式方式實現責任鏈模式函式模式
- 深入分析C++物件模型之移動建構函式C++物件模型函式
- js實現移動端字型響應式JS
- js 使用建構函式和原型鏈實現繼承操作JS函式原型繼承
- Oracle 分析函式的使用Oracle函式
- 實現累加的經典sql方法SQL
- 不使用日期函式實現ADD_MONTHS函式功能(二)函式
- 函式指標之回撥函式和轉移表函式指標
- 【Mysql】Mysql似oracle分析函式sum over的實現MySqlOracle函式
- C++ 移動構造和複製建構函式匹配C++函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- 函式:file.move 移動檔案函式
- 遞迴匿名函式手動實現 http_build_query 系統函式遞迴函式HTTPUI
- 函式節流實現滑動下拉選單函式
- 用虛擬函式實現事件驅動! (轉)函式事件
- shell程式設計例項--實現累加程式設計
- 移動應用營銷分析:消費者如何發現和使用應用
- 使用bcc分析函式耗時函式
- Oracle分析函式使用總結Oracle函式
- [手寫系列] Spirit帶你實現防抖函式和節流函式函式
- 移動平均數的應用方法
- Java中計算移動平均線Java
- memmove和memcpy函式的區別及實現memcpy函式
- Oracle分析函式七——分析函式案例Oracle函式
- MySQL排名函式實現MySql函式
- fcntl函式實現dup函式