SQL游標操作每隔5分鐘時間段資料統計資訊

2021-09-06 14:48:37 字數 3402 閱讀 6668

tb_people 表資訊:

id     uname    era     amount    plushtime          

1000031    張亮    中年    100000    201404050908  

1000032    張亮    中年    100000    201404050913   

1000033    天天    年輕    233233    201404050918   

1000034    天天    年輕    233233    201404050923   

1000035    kimi    年輕    455631    201404050933   

1000036    kimi    年輕    455631    201404050938   

--分析出每5分鐘內有多少人乘車

--時間轉化秒不用轉化 初始刷卡時間值是20140404090806

update [tb_people] set shuacardtime=substring(plushtime,1,4)+'-'+substring(plushtime,5,2)+'-'+substring(plushtime,7,2)+' '+substring(plushtime,9,2)+':'+substring(plushtime,11,2)

結果為:

id      uname   era    amount    plushtime           shuacardtime

1000031    張亮    中年    100000    201404050908    2014-04-05 09:08

1000032    張亮    中年    100000    201404050913    2014-04-05 09:13

1000033    天天    年輕    233233    201404050918    2014-04-05 09:18

1000034    天天    年輕    233233    201404050923    2014-04-05 09:23

1000035    kimi    年輕    455631    201404050933    2014-04-05 09:33

1000036    kimi    年輕    455631    201404050938    2014-04-05 09:38

--構造區間段

declare @daybegin datetime,@dayend datetime

declare @table table(starttime datetime,endtime datetime)

set @daybegin = '2014-04-05 6:00'

set @dayend = '2014-04-06 0:00'

while @daybegin <=@dayend

begin

insert @table select @daybegin,dateadd(mi,5,@daybegin) --每5分鐘乙個間隔

set @daybegin=dateadd(mi,5,@daybegin)

endselect * from @table -- 執行後資料如下

starttime                              endtime

2014-04-05 06:00:00.000    2014-04-05 06:05:00.000

2014-04-05 06:05:00.000    2014-04-05 06:10:00.000

2014-04-05 06:10:00.000    2014-04-05 06:15:00.000

2014-04-05 06:15:00.000    2014-04-05 06:20:00.000

2014-04-05 06:20:00.000    2014-04-05 06:25:00.000

--區間段分好了,就可以想到每取出乙個時間段,然後在乘車時間記錄表裡查詢有多少條記錄在該段時間內就行了,可以考慮用游標。

declare s cursor --declare 建立游標

static

for select starttime,endtime from @table

--定義變數

declare @starttime datetime,@endtime datetime

declare @temptable table(starttime datetime,endtime datetime,number int)

open s --開啟游標

fetch next from s into @starttime,@endtime --提取上次提取行的下一行

while(@@fetch_status = 0)

begin

insert @temptable select isnull(max(@starttime),@starttime),isnull(max(@endtime),@endtime), count(*) from tb_people where shuacardtime > @starttime and shuacardtime <=@endtime

--這裡就不能用between and了,不然分隔的時間點上車的人數會在相鄰的兩個區間段重複計數,另外第一班車的上車時間等於@starttime 沒有計進去,這裡不影響總體分析,當然可以做個標記,讀乙個區間段時用between...and...就可以了

fetch next from s into @starttime,@endtime

endclose s --關閉游標

deallocate s --刪除游標,釋放資源

select * from @temptable

執行結果如下:

starttime                                endtime                      number

2014-04-05 09:05:00.000    2014-04-05 09:10:00.000    1

2014-04-05 09:10:00.000    2014-04-05 09:15:00.000    1

2014-04-05 09:15:00.000    2014-04-05 09:20:00.000    1

2014-04-05 09:20:00.000    2014-04-05 09:25:00.000    1

2014-04-05 09:25:00.000    2014-04-05 09:30:00.000    0

2014-04-05 09:30:00.000    2014-04-05 09:35:00.000    1

sql時間段切分實現每隔x分鐘出乙份高速門架車流量

目錄 我們需要查詢從表t裡查詢某一天按照5分鐘為一段間隔通過高速門架的車流量。部分脫敏資料如下 表t裡包含time,id,chepai,部分資料為 2020 02 23 00 43 27 某高速門架0010 浙 按照正常情況下我們的限定where條件是time 2020 02 23 0 00 and...

5分鐘實現集群 NTP時間同步

環境 vmware workstation 12 pro,windows 10,centos 7.5,xshell5 ntp network timeprotocol,網路時間協議 使用來使本地機器與服務端機器時間保持同步的一種協議。如果我們只有一台機器那麼只需要安裝ntp客戶端ntpdate這個包...

MySql 時間間隔 與 當前時間5分鐘之前

select from tb user where signtime between date add now interval 5 minute and now 列出當前時間與5分鐘之內的 使用者記錄 其中 interval 5 minute 為間隔時間 now 為資料庫當前時間 附錄今天在學習儲...