日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

求助:关于sql如何统计时间的问题

發(fā)布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求助:关于sql如何统计时间的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

三、現(xiàn)在我們假設應用計時分為app應用和web應用,需要考慮如下幾個方面:

(1)多時間段(2)表中有冗雜數(shù)據(jù)

(3)用戶是在web端和app端都登陸,這種類型的重復時間段只能取其一

?

存在數(shù)據(jù):

存在表:應用啟動時間統(tǒng)計表Applic_Sessions

字段:applic ???platform ????start_time ????end_time ????status ????rowid

???????????? X ???????? web ??????????11:30 ?????????????18:33 ??????????1 ??????????1

???????? ? ? X ???????? app ?????????? 11:10 ? ?????????? 17:50 ??????????1 ??????????2

?????????????X ???????? app ???????? ? 17:55 ?????????????19:55 ??????????1 ??????????3

???????????? X ???????? app ?????????? 20:31 ?????????????22:31 ??????????1 ??????????4

???????????? X ???????? web ?????????? 02:01 ?????????????02:40 ??????????1 ??????????5

?

利用sql語句的方式獲取到開始時間和結束時間,timestampdiff( )相減得到。

(1)取出X用戶兩平臺中啟動的最小時間

(2)取出X用戶兩平臺中結束的最大時間

按照以上步驟,這樣會帶來一個問題:如rowid 15的記錄,相減所得結果明顯大于實際結果。

?

嘗試方案1:將不同平臺的數(shù)據(jù)區(qū)分開單獨計數(shù):

(1)select t.* from Applic_Sessions t where t.platform = “web”;

視圖:Web_View

applic ????platform ?????start_time???? end_time ???? status ????rowid

????X ????????web ??????????????11:30 ?????????????18:33 ??????????1 ??????????1

??? X ???????? web ??????????????02:01 ?????????????02:40 ??????????1 ??????????2

select sum(timestampdiff(second,start_time,end_time)) from Web_View;

?

(2)select t.* from Applic_Sessions t where t.platform = “app”;

視圖:App_View

applic ?????platform ????start_time ????end_time ????status ????rowid

????X ????????????app ??????????11:10 ?????????????17:50 ???????? ??1 ??????????1

????X ????????????app ??????????17:55 ?????????????19:55 ???????? ? 1 ??????????2

????X???????????? app ??????????20:31 ?????????????22:31 ???????? ? 1 ??????????3

select sum(timestampdiff(second,start_time,end_time)) from Web_View;

?

這樣求取出單個平臺的使用時長,這種適用于:app使用時長可以換取雙倍積分 等需求。但是至于中間的重復時間段更加干不掉了,這種方法pass

方案2

視圖:Applic_Sessions

applic platform ?start_time end_time status rowid

Xweb??????11:30?18:33??1??1

Xapp??????11:10?17:50??1??2

Xapp??????17:55?19:55??1??3

X app ??????20:31 ?22:31 ??1 ??4

X web ??????02:01 ?02:40 ??1 ??5

?

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

????????????????????????????????????????????????????11:30............................................18:33(web)

????????????????????????????????????11:10....................17:50(app)

????????????????????????????????????????????????????????????????????????????????????????17:55.................19:55(app)

????????????02:01....02:40 ??????????????????????????????????????????????????????????????????????????????????????????????????  ?20:31.......22:31

?

整理一下數(shù)據(jù),發(fā)現(xiàn)其中的難點就是:web的使用時長段與app的使用時間段夾雜在一起,其他正常數(shù)據(jù)橫向合并就成,那第一步就是把這些夾雜數(shù)據(jù)單獨拎出來,然后取出最小啟動值和最大結束值,相減就好拉:

寫下這個sql,越看越別扭,能行么---顯然不行

select t.* from Applic_Sessions t where

????????t.start_time between (select min(t.start_time) from Applic_Sessions t) ????

??????? and (select max(t.end_time) from Applic_Sessions t)

????????????????and t.end_time between t.start_time and t.end_time;

至此,卡住了。。。

?

絞盡了腦汁,搞不定啊,有哪位大神可以幫幫忙啊,謝謝了

?

轉載于:https://www.cnblogs.com/bling123/p/8493254.html

總結

以上是生活随笔為你收集整理的求助:关于sql如何统计时间的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。