sql時(shí)間段切分實(shí)現(xiàn)每隔x分鐘出一份高速門架車流量
業(yè)務(wù)場(chǎng)景:
我們需要查詢從表T里查詢某一天按照5分鐘為一段間隔通過高速門架的車流量。部分脫敏數(shù)據(jù)如下
表T里包含time,id,chepai,部分?jǐn)?shù)據(jù)為(’2020-02-23 00:43:27','某高速門架0010','浙XXXXXX')
按照正常情況下我們的限定where條件是time >= '2020-02-23 0:00' and time < '2020-02-23 0:00' 或者 between等,但是這樣來寫一兩個(gè)還行,要每隔5分鐘切分一次,需要寫二百多,過于麻煩
解決思路:
- 需要把時(shí)間進(jìn)行下降到其5分鐘開始的最初時(shí)間處理,即00:12:30是在00:10:00-00:15:00之間,要轉(zhuǎn)換為00:10:00,同樣10:21:39在10:20:00-10:25:00,所以轉(zhuǎn)換為10:20:00,這樣一來五分鐘內(nèi)的數(shù)據(jù)都下降統(tǒng)一成5分初的時(shí)間,也就是5分鐘這一段的數(shù)據(jù)就有了。當(dāng)然也可以把數(shù)據(jù)進(jìn)行上升處理,只不過23:55:00-23:59:59這個(gè)時(shí)間段就上升到第二天的00:00了
- 對(duì)時(shí)間段進(jìn)行下降處理思想有了,問題是如何實(shí)現(xiàn):可以把時(shí)間字段轉(zhuǎn)換為數(shù)字整形,即每一個(gè)時(shí)間都對(duì)應(yīng)著一串?dāng)?shù)字,只要把這個(gè)數(shù)字由年月日時(shí)分秒切割相加再除以5,然后向下取整再乘以5,最后再轉(zhuǎn)換為時(shí)間,這樣就能達(dá)到下降了,這里的核心思想就是無法整除5的那部分余數(shù)就是5分鐘這個(gè)時(shí)間段的,現(xiàn)在我們向下取整,比如2.75向下取整是2,那么就能把時(shí)間下降了。同樣的如果是每隔10分鐘,那就是除以10,每隔1小時(shí)的,直接substr切分時(shí)間字段就可以了
- 這里使用強(qiáng)大的兩個(gè)函數(shù)FROM_UNIXTIME和UNIX_TIMESTAMP來完成,具體使用方法參加我的舊文http://www.dbjr.com.cn/article/239100.htm腳本實(shí)現(xiàn):
SELECT t.time, t.id, COUNT(DISTINCT(t.chepai)) num FROM (SELECT time, id, -- FROM_UNIXTIME把整型數(shù)字轉(zhuǎn)為時(shí)間類型 FROM_UNIXTIME( -- 一般年月日無需動(dòng),直接unix_timestamp先轉(zhuǎn)為整型再加上時(shí)分秒即可 unix_timestamp(left(time,10)) -- 分*60+秒然后除以5,floor向下取整后再*5*60,具體思路見上 +5*60*floor((substr(PicTime,12,2)*60+substr(Pictime,15,2))/5) ) time, chepai FROM T WHERE left(time,10) = '2020-02-23' ORDER BY time asc)t GROUP BY t.time,t.id ORDER BY t.time,t.id
到此這篇關(guān)于sql時(shí)間段切分實(shí)現(xiàn)每隔x分鐘出一份高速門架車流量的文章就介紹到這了,更多相關(guān)sql時(shí)間段切分內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
數(shù)據(jù)庫(kù)中聚簇索引與非聚簇索引的區(qū)別[圖文]
在《數(shù)據(jù)庫(kù)原理》里面,對(duì)聚簇索引的解釋是:聚簇索引的順序就是數(shù)據(jù)的物理存儲(chǔ)順序,而對(duì)非聚簇索引的解釋是:索引順序與數(shù)據(jù)物理排列順序無關(guān)。正式因?yàn)槿绱?,所以一個(gè)表最多只能有一個(gè)聚簇索引2012-02-02sqlserver 無法驗(yàn)證產(chǎn)品密匙的完美解決方案[測(cè)試通過]
Win2003 SQL2000時(shí)CD-KEY(序列號(hào))無法驗(yàn)證的問題的解決方法2009-07-07使用SQL SERVER存儲(chǔ)過程實(shí)現(xiàn)歷史數(shù)據(jù)遷移方式
這篇文章主要介紹了使用SQL SERVER存儲(chǔ)過程實(shí)現(xiàn)歷史數(shù)據(jù)遷移,介紹了歷史數(shù)據(jù)遷移的基本概念及目的,對(duì)SQL SERVER存儲(chǔ)過程歷史數(shù)據(jù)遷移知識(shí)感興趣的朋友參考下吧2021-09-09sql語句將數(shù)據(jù)庫(kù)一條數(shù)據(jù)通過分隔符切割成多列方法實(shí)例
最近工作中遇到數(shù)據(jù)表中有一列數(shù)據(jù),然后需要將該列數(shù)據(jù)分成三列,下面這篇文章主要給大家介紹了關(guān)于sql語句將數(shù)據(jù)庫(kù)一條數(shù)據(jù)通過分隔符切割成多列的相關(guān)資料,需要的朋友可以參考下2023-03-03分享網(wǎng)站群發(fā)站內(nèi)信數(shù)據(jù)庫(kù)表設(shè)計(jì)
本文和大家分享一下網(wǎng)站站內(nèi)信實(shí)現(xiàn)表設(shè)計(jì)的功能。需要的朋友可以參考下。2010-03-03使用NotePad++錄制宏功能如何快速將sql搜索條件加上前后單引號(hào)
這篇文章給大家介紹使用NotePad++錄制宏功能如何快速將sql搜索條件加上前后單引號(hào),對(duì)notepad 引號(hào)問題感興趣的朋友可以參考下本篇文章2015-10-10SQL Server服務(wù)啟動(dòng)的實(shí)現(xiàn)步驟
本文主要介紹了SQL Server服務(wù)啟動(dòng)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Sql2000數(shù)據(jù)庫(kù)的備份文件恢復(fù)到Sql2005的方法
真的和sql2000恢復(fù)方法不同,我用這里介紹的辦法恢復(fù)成功了2009-12-12