?下午看到項目有個統(tǒng)計報表的生成,其中XX表中記錄相鄰2條記錄統(tǒng)計時間差 即
?? 表中數(shù)據(jù)如下:
?要求相鄰2條記錄 如第1條和第2條記錄創(chuàng)建時間差統(tǒng)計出來
? 即
????????? zhouhui???????? 5秒
????????? dingxiang???? 24秒
?
需求出來了需要解決,后來找到解決辦法了
方法 1:
Sql代碼??
-
select?t.username,(max(?t.creationdate)-min(t.creationdate))*24*60*60,count(t.username)/2??
-
??from?ofloginlog?t??
-
?–where?USERNAME?=?‘zhouhui’??
-
?group?by?t.username??
?? 通過分組 統(tǒng)計出用戶在線時長(即前后2條記錄作差)
?? 效果圖:?
說明 最后一個字段我是用來統(tǒng)計 用戶登錄次數(shù)使用的。
?????? oracle 兩個時間相減默認(rèn)的是天數(shù)
?????? oracle 兩個時間相減默認(rèn)的是天數(shù)*24 為相差的小時數(shù)
?????? oracle 兩個時間相減默認(rèn)的是天數(shù)*24*60 為相差的分鐘數(shù)
?????? oracle 兩個時間相減默認(rèn)的是天數(shù)*24*60*60 為相差的秒數(shù)
方法2:
Sql代碼??
-
select?username,?sum(b),?count(username)?/?2??
-
???from?(select?id,?username,?(CREATIONDATE?–?lgtime)?*?24?*?60?*?60?as?b??
-
???????????from?(select?t.*,??
-
????????????????????????lag(type)?over(partition?by?username?order?by?CREATIONDATE)?lgtype,??
-
????????????????????????lag(CREATIONDATE)?over(partition?by?username?order?by?CREATIONDATE)?lgtime??
-
???????????????????from?ofloginlog?t))??
-
?—?where?USERNAME?=?‘zhouhui’)??
-
??group?by?username??
?? 實現(xiàn)效果 一樣 這里不帖了
?? 又復(fù)習(xí)了一下基本的SQL 了 呵呵
20100520 需求有些變更 要求統(tǒng)計個數(shù)不是統(tǒng)計TYPE 1 和0 記錄之和均值,只統(tǒng)計TYPE=0 的值,
這樣SQL 的分組就不能這樣了,想了一下改進(jìn)了SQL
Sql代碼??
-
select?g.username,?g.time,?h.count??
-
???from?(select?t.username,??
-
????????????????floor((max(t.CREATIONDATE)?–?min(t.CREATIONDATE))?*?24?*?60?*?60)?as?time??
-
???????????from?ofloginlog?t,?ofuser?b??
-
??????????where?1?=?1??
-
????????????and?t.username?=?b.username??
-
??????????group?by?t.username)?g,??
-
????????(select?t.username,?count(t.username)?as?count??
-
???????????from?ofloginlog?t??
-
??????????where?t.type?=?‘0’??
-
??????????group?by?t.username)?h??
-
??where?g.username?=?h.username??
-
??order?by?count?desc??
??? 查詢結(jié)果
????
?分析 時間差是2個集合之間的差,而后面統(tǒng)計個數(shù)只是單獨限制條件是TYPE=0的記錄數(shù),統(tǒng)計的數(shù)據(jù)個數(shù)就不一致,所以很難一個分組實現(xiàn),思路是先實現(xiàn) USERNAME 和TIME 的記錄 在統(tǒng)計USERNAME和滿足TYPE=0的記錄個數(shù) 將2個結(jié)果合并 通過? SELECT? XX? FROM?? A? B 2個臨時表的內(nèi)聯(lián)關(guān)系實現(xiàn)合并結(jié)果集合
本文講解了sql 相鄰2條記錄時間差比較 ,更多相關(guān)內(nèi)容請關(guān)注php中文網(wǎng)。
相關(guān)推薦: