ORCLE 知識總結

1.通過tagname分組取當前5分鐘時間往前離timetamp最近的一條記錄

SELECT TAGNAME, TAGVALUE, TIMETAMP
  FROM (SELECT TAGNAME,
               TAGVALUE,
               TIMETAMP,
               ROW_NUMBER() OVER(PARTITION BY TAGNAME ORDER BY TIMETAMP DESC) RN
          FROM jcsj_sssj
         WHERE TIMETAMP BETWEEN
               SYSDATE - 5 / (24 * 60) AND SYSDATE)
 WHERE RN = 1;

ruw_number(): 從1開始,爲每一條分組記錄返回一個數字
ROW_NUMBER() OVER(PARTITION BY TAGNAME ORDER BY TIMETAMP DESC) RN:表示根據tagname分組,
在分組內部根據timetamp倒序排序
而row_number()的計算值爲每組內部排序後的順序編號
詳細函數用法請看:http://blog.csdn.net/a380346189/article/details/56842038

2. rank() over(partition by a order by c desc) mm
1.在求第一名成績的時候,不能用row_number(),因爲如果同班有兩個並列第一,row_number()只返回一個結果 row_number() 是對列進行編號
2.rank()和dense_rank()的區別是:
–rank()是跳躍排序,有兩個第二名時接下來就是第四名
–dense_rank()l是連續排序,有兩個第二名時仍然跟着第三名
3.select a,b,c,sum(c)over(partition by a) from t2
對a進行分組 對c進行分組後求和,但是b值並不丟棄。
4.group 和 patition by的區別
4.1group by是對檢索結果的保留行進行單純分組,一般總愛和聚合函數一塊用例如AVG(),COUNT(),max(),main()等一塊用。
4.2 partition by雖然也具有分組功能,但同時也具有其他的功能。
它屬於oracle的分析用函數。
sum() over (PARTITION BY …) 是一個分析函數。 他執行的效果跟普通的sum …group by …不一樣,它計算組中表達式的累積和,而不是簡單的和。
5.sum()over()倆個用法的區別
SUM(d) OVER(PARTITION BY c ORDER BY d)
加上orcer by 是根據排序 依次累加
SUM(d) OVER(PARTITION BY c )
不加是總和

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章