需求:gps设备一天内存在很多组gps数据 要求每20分钟必须上传一组gps数据 否则则判定gps设备存在问题
通过 with as 创建一个虚拟表 见注释
-- WITH recursive用于递归
WITH recursive Date_Ranges AS (
-- 初始条件
select '2021-12-28 00:00:00' as Datetime
-- union all 上下连接所有结果集
union all
-- 递增条件规则
select Datetime + interval 20 minute
from Date_Ranges
-- 结束条件
where Datetime < '2021-12-28 23:39:59')
-- 虚拟表创建完成
-- 查看虚拟表
select * from Date_Ranges
结果如下
左连接(从gps表里把上传时间提取出来进行 按照虚拟表的格式取整 ) 如果从gps表的上传时间为空则表示没有数据
-- WITH recursive用于递归
WITH recursive Date_Ranges AS (
-- 条件初始化
select '2021-12-28 00:00:00' as Datetime
-- union all 上下连接所有结果集
union all
-- 条件开始
select Datetime + interval 20 minute
from Date_Ranges
-- 条件结束
where Datetime < '2021-12-28 23:39:59')
-- 虚拟表创建完成
select * from Date_Ranges
left join (select (FROM_UNIXTIME(floor(time/1200)*1200)) as use_time,code from `gps_table_2021_12_28`
where code=123456
group by use_time,code) b on DateTime=b.use_time