小問題-用分析函式求平均時間段的統計數.txt
在qq群裡看到一個問題,覺得很好解決。但坐下來認真分析,卻發現自己不會。
問題:
有如下的一個表
SQL> select * from test order by time;
TIME COUNT
-------- ----------
00:00:02 6
00:00:04 9
00:00:07 7
00:00:09 2
00:00:09 3
00:00:10 5
00:00:12 1
00:00:15 8
00:00:18 4
需要統計每五秒count的平均值。(半開半閉區間,即0秒包括[0,5)秒)
結果應該為:
TIME avg(COUNT)
-------- ----------
00:00:00 7.5
00:00:05 3.3
00:00:10 3
00:00:15 6
想了一晚上,現在只知道得出平均值的一個笨方法:
floor((to_date(time,'hh24:mi:ss')-trunc(to_date(time,'hh24:mi:ss')))*86400/5)
得到結果:
SQL> select floor((to_date(time,'hh24:mi:ss')-trunc(to_date(time,'hh24:mi:ss')))*86400/5),time from test order by
time;
FLOOR((TO_DATE(TIME,'HH24:MI:S TIME
------------------------------ --------
0 00:00:02
0 00:00:04
1 00:00:07
1 00:00:09
1 00:00:09
2 00:00:10
2 00:00:12
3 00:00:15
3 00:00:18
9 rows selected
異常艱難地得到了各個時間所在的分組:
SQL> select floor((to_date(time,'hh24:mi:ss')-trunc(to_date(time,'hh24:mi:ss')))*86400/5)/86400*5+trunc(to_date
(time,'hh24:mi:ss')),time,count from test order by time;
FLOOR((TO_DATE(TIME,'HH24:MI:S TIME COUNT
------------------------------ -------- ----------
2012-12-1 00:00:02 6
2012-12-1 00:00:04 9
2012-12-1 0:00:05 00:00:07 7
2012-12-1 0:00:05 00:00:09 2
2012-12-1 0:00:05 00:00:09 3
2012-12-1 0:00:10 00:00:10 5
2012-12-1 0:00:10 00:00:12 1
2012-12-1 0:00:15 00:00:15 8
2012-12-1 0:00:15 00:00:18 4
根據以前學過的分析函式,over子句,用floor這個表示式作為分割槽條件應該是合適的,於是嘗試:
SQL> select distinct floor((to_date(time,'hh24:mi:ss')-trunc(to_date(time,'hh24:mi:ss')))*86400/5)/86400*5+trunc
(to_date(time,'hh24:mi:ss')),
avg(count) over (partition by floor((to_date(time,'hh24:mi:ss')-trunc(to_date(time,'hh24:mi:ss')))
*86400/5)/86400*5+trunc(to_date(time,'hh24:mi:ss')))
from test;
FLOOR((TO_DATE(TIME,'HH24:MI:S AVG(COUNT)OVER(PARTITIONBYFLOO
------------------------------ ------------------------------
2012-12-1 0:00:05 4
2012-12-1 0:00:10 3
2012-12-1 0:00:15 6
2012-12-1 7.5
看著都覺得噁心,不過總算有個結果了。以後有時間再研究。
當前存在的不足主要是時間太不靈活了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26451536/viewspace-753261/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 請求執行時間段與Shell函式(轉)函式
- excel統計大於15小於20的數並求和 統計區間個數的函式Excel函式
- ORACLE計算2個時間段相差時間小時、分、秒Oracle
- 分析函式——統計函式
- DB2 時間函式小結 .DB2函式
- TO_DATE函式的小問題(二)函式
- 倒數計時快取時間問題總結快取
- c++ CopyFile函式響應時間過長問題。C++函式
- oracle 統計分析函式Oracle函式
- 時間序列分析(一)--移動平均
- 常用函式--時間函式函式
- 查詢某時間段的統計資料
- sql 獲取系統時間的函式。SQL函式
- 時間函式函式
- 計算兩段時間的時間差 (轉)
- 統計原理 平均數
- linux系統程式設計之檔案與IO(七):時間函式小結Linux程式設計函式
- Oracle統計分析函式集,over(partition by..) 的運用Oracle函式
- python用time函式計算程式執行時間Python函式
- 分散式系統的硬核:時間時鐘問題和演算法分散式演算法
- Oracle計算時間函式(對時間的加減numtodsinterval、numtoyminterval)Oracle函式
- to_date函式與當前系統時間格式可否隱式轉換問題總結函式
- 使用ASM框架實現統計函式執行時間ASM框架函式
- 分析函式之排名統計函式
- linux系統時間程式設計(9) 計算程式片段執行時間clock函式Linux程式設計函式
- 探索MySQL高階語句(數學函式、聚合函式、字串函式、日期時間函式)MySql函式字串
- 函式呼叫引數變數傳值的問題函式變數
- python獲取系統時間(時間函式詳解)Python函式
- 大神是怎樣用函式式JavaScript計算陣列平均值的函式JavaScript陣列
- [20180509]函式索引問題.txt函式索引
- shell 計算時間差的問題
- PHP 時間函式PHP函式
- 日期時間函式函式
- oracle時間函式Oracle函式
- MySQL時間函式MySql函式
- Sql時間函式SQL函式
- 使用微分中值定理分析開區間時導數和函式的有界關係函式
- hdu 2665 可持久化線段樹求區間第K大值(函式式線段樹||主席樹)持久化函式