sql 相鄰2條記錄時間差比較

?下午看到項目有個統(tǒng)計報表的生成,其中XX表中記錄相鄰2條記錄統(tǒng)計時間差 即

?? 表中數(shù)據(jù)如下:

sql 相鄰2條記錄時間差比較

?要求相鄰2條記錄 如第1條和第2條記錄創(chuàng)建時間差統(tǒng)計出來

? 即

????????? zhouhui???????? 5秒

????????? dingxiang???? 24秒

?

需求出來了需要解決,后來找到解決辦法了

方法 1:

Sql代碼??sql 相鄰2條記錄時間差比較

  1. select?t.username,(max(?t.creationdate)-min(t.creationdate))*24*60*60,count(t.username)/2??

  2. ??from?ofloginlog?t??

  3. ?–where?USERNAME?=?‘zhouhui’??

  4. ?group?by?t.username??

?? 通過分組 統(tǒng)計出用戶在線時長(即前后2條記錄作差)

?? 效果圖:?

sql 相鄰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代碼??sql 相鄰2條記錄時間差比較

  1. select?username,?sum(b),?count(username)?/?2??

  2. ???from?(select?id,?username,?(CREATIONDATE?–?lgtime)?*?24?*?60?*?60?as?b??

  3. ???????????from?(select?t.*,??

  4. ????????????????????????lag(type)?over(partition?by?username?order?by?CREATIONDATE)?lgtype,??

  5. ????????????????????????lag(CREATIONDATE)?over(partition?by?username?order?by?CREATIONDATE)?lgtime??

  6. ???????????????????from?ofloginlog?t))??

  7. ?—?where?USERNAME?=?‘zhouhui’)??

  8. ??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代碼??sql 相鄰2條記錄時間差比較

  1. select?g.username,?g.time,?h.count??

  2. ???from?(select?t.username,??

  3. ????????????????floor((max(t.CREATIONDATE)?–?min(t.CREATIONDATE))?*?24?*?60?*?60)?as?time??

  4. ???????????from?ofloginlog?t,?ofuser?b??

  5. ??????????where?1?=?1??

  6. ????????????and?t.username?=?b.username??

  7. ??????????group?by?t.username)?g,??

  8. ????????(select?t.username,?count(t.username)?as?count??

  9. ???????????from?ofloginlog?t??

  10. ??????????where?t.type?=?‘0’??

  11. ??????????group?by?t.username)?h??

  12. ??where?g.username?=?h.username??

  13. ??order?by?count?desc??

??? 查詢結(jié)果

????
sql 相鄰2條記錄時間差比較
?分析 時間差是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)推薦:

.net2.0連接Mysql5數(shù)據(jù)庫配置

.net2.0連接Mysql5數(shù)據(jù)庫配置

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊8 分享