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 為資料庫當前時間 附錄今天在學習儲...