Mysql查询查找指定的行

时间:2012-11-30 06:53:06

标签: mysql sql

我有一个表trip_data。每隔一秒我收到数据包并将数据插入数据库。trip_data表包含四个fields.trip_paramid,fuel_content,creation_time&vehicle_id。我想选择创建之间差异的所有行时间是2分钟(不完全是2.大约2)。trip_data表包含40个缺少行。所以我需要一个优化的选择查询。任何人都可以提供帮助。这里是trip_table的表模式和示例数据..

SQlFiddle demo

3 个答案:

答案 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)

以下是SQLFiddle demo

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分钟一个项目