溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle計算時間差常用函數(shù)

發(fā)布時間:2020-07-08 19:25:32 來源:網(wǎng)絡 閱讀:1078 作者:18620626259 欄目:關系型數(shù)據(jù)庫

Oracle計算時間差常用函數(shù)
兩個Date類型字段:START_DATE,END_DATE,計算這兩個日期的時間差(分別以天,小時,分鐘,秒,毫秒):
天:
ROUND(TO_NUMBER(END_DATE - START_DATE))


ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)


ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)


ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)

毫秒
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 1000)


十分鐘前
select  sysdate -10/(60*24)   from dual 

select
status,
continued_time, /*時間單位為秒*/
sid,
sql_id,
username,
FIRST_REFRESH_TIME,
LAST_REFRESH_TIME,
SQL_TEXT,
ERROR_NUMBER,
ERROR_MESSAGE
from
(
select
status,
ROUND(TO_NUMBER(LAST_REFRESH_TIME - FIRST_REFRESH_TIME) * 24 * 60 * 60 ) as continued_time , /*時間為秒*/
sid,
sql_id,
username,
FIRST_REFRESH_TIME,
LAST_REFRESH_TIME,
SQL_TEXT,
ERROR_NUMBER,
ERROR_MESSAGE,
row_number() OVER(PARTITION BY sql_id ORDER BY t.LAST_REFRESH_TIME desc) as row_flg
from
gv$sql_monitor t
----where t.LAST_REFRESH_TIME > sysdate -10/(60*24) ------采集當前時間10分鐘內(nèi)的
)
temp
where temp.row_flg=1

Oracle去除重復(某一列的值重復),取最新(日期字段最新)的一條數(shù)據(jù)

解決思路:用Oracle的row_number() over函數(shù)來解決該問題。
解決過程:
 1.查看表中的重復記錄
select
    t.id,
    t.device_id,
    t.update_dtm,
    t.test_result
from DEVICE_INFO_TBL t


2.標記重復的記錄
select
    t.id,
    t.device_id,
    t.update_dtm,
    t.test_result,
    row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm desc) as row_flg  
from DEVICE_INFO_TBL t


3.過濾重復數(shù)據(jù),取得最新的記錄
select
    temp.id,
    temp.device_id,
    temp.update_dtm,
    temp.test_result
from (
         select
             t.id,
             t.device_id,
             t.update_dtm,
             t.test_result,
             row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm desc) as row_flg  
          from DEVICE_INFO_TBL t ) temp
where temp.row_flg  = '1'


row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根據(jù)COL1分組,在分組內(nèi)部根據(jù) COL2排序,而此函數(shù)計算的值就表示每組內(nèi)部排序后的順序編號(組內(nèi)連續(xù)的唯一的).
與rownum的區(qū)別在于:使用rownum進行排序的時候是先對結(jié)果集加入偽列rownum然后再進行排序,而此函數(shù)在包含排序從句后是先排序再計算行號碼.
row_number()和rownum差不多,功能更強一點(可以在各個分組內(nèi)從1開時排序).
rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內(nèi)).
dense_rank()l是連續(xù)排序,有兩個第二名時仍然跟著第三名。相比之下row_number是沒有重復值的 .
lag(arg1,arg2,arg3):
arg1是從其他行返回的表達式
arg2是希望檢索的當前行分區(qū)的偏移量。是一個正的偏移量,時一個往回檢索以前的行的數(shù)目。
arg3是在arg2表示的數(shù)目超出了分組的范圍時返回的值。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI