我有一个表trip_data
。每隔一秒我收到数据包并将数据插入数据库。trip_data
表包含四个fields.trip_paramid,fuel_content,creation_time&vehicle_id
。我想选择创建之间差异的所有行时间是2分钟(不完全是2.大约2)。trip_data
表包含40个缺少行。所以我需要一个优化的选择查询。任何人都可以提供帮助。这里是trip_table的表模式和示例数据..
答案 0 :(得分:1)
SELECT
tp.*
FROM
trip_parameters tp
GROUP BY
CONVERT(UNIX_TIMESTAMP (tp.creation_time)/(2*60), unsigned)
ORDER BY
tp.creation_time asc
请注意,使用UNIX_TIMESTAMP不允许您处理2037年以后的日期。使用以下代码可以解决问题:
CONVERT(TIMESTAMPDIFF(SECOND,'1970-01-01 00:00:00',tp.creation_time)/(2*60), unsigned)
答案 1 :(得分:0)
您可以使用MYSQL User defined variables在一次表格扫描中执行此操作。不幸的是,UDV有一组有限的数据类型(整数,十进制,浮点,二进制或非二进制字符串)。因此,在此查询中,我使用char @ti
varible来存储之前的日期时间,使用CAST将其与Creation_time
字段进行比较。此变量的初始值我设置为(now() - 10000000)您可以使用任何希望小于MIN的日期(Creation_time)
select * from
(
select trip_parameters.*,
if(ABS(TIMESTAMPDIFF(MINUTE,Creation_time,cast(@ti as datetime)))>=2,1,0) t,
@ti:=if(ABS(TIMESTAMPDIFF(MINUTE,Creation_time,cast(@ti as datetime)))>=2,
cast(Creation_time as char(100)),@ti)
from trip_parameters,
(select @ti:=cast(now()-10000000 as char(100))) a
order by creation_time
) t2
where T=1
order by creation_time
答案 2 :(得分:-1)
试试这个
SELECT trip_paramid, fuel_content, creation_time, vehicle_id
FROM trip_parameters
GROUP BY FLOOR(UNIX_TIMESTAMP(creation_time)/120)
这需要每2分钟一个项目