时间:2022-08-07 08:58:14 | 栏目:MsSql | 点击:次
我们需要查询从表T里查询某一天按照5分钟为一段间隔通过高速门架的车流量。部分脱敏数据如下

表T里包含time,id,chepai,部分数据为(’2020-02-23 00:43:27','某高速门架0010','浙XXXXXX')
按照正常情况下我们的限定where条件是time >= '2020-02-23 0:00' and time < '2020-02-23 0:00' 或者 between等,但是这样来写一两个还行,要每隔5分钟切分一次,需要写二百多,过于麻烦
SELECT t.time,
t.id,
COUNT(DISTINCT(t.chepai)) num
FROM
(SELECT time,
id,
-- FROM_UNIXTIME把整型数字转为时间类型
FROM_UNIXTIME(
-- 一般年月日无需动,直接unix_timestamp先转为整型再加上时分秒即可
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