行Mysql Query之间的区别

时间:2012-11-12 10:03:26

标签: mysql sql

我有一个表有四个字段:

trip_paramid, creation_time, fuel_content,vehicle_id

我想找到两行之间的区别。在我的表中我有一个字段fuel_content.Every两分钟我收到数据包并插入数据库。从此我想找出总加油量。如果两个包之间的燃料含量大于2,我将其视为加油数量。多个加油可能在同一天发生。所以我想找出车辆一天的总加油量。我在sqlfiddle中创建了一个表格模式和样本数据。任何人都可以帮我找到一个解决方案。这里有表格模式的链接.. http://www.sqlfiddle.com/#!2/4cf36

2 个答案:

答案 0 :(得分:2)

这是一个很好的查询。

在查询中注入参数(vehicle_id = 13)和(date ='2012-11-08'),但它们是要修改的参数。

你可以注意到我选择了使用creation_time<..creation_time>..代替DATE(creation_time)='...'的表达式,这是因为第一个表达式可以使用“creation_time”上的索引而第二个表达式可以使用索引不能。

SELECT
SUM(fuel_content-prev_content) AS refuel_tot
, COUNT(*) AS refuel_nbr
FROM (
  SELECT
  p.trip_paramid
  , fuel_content
  , creation_time
  , (
    SELECT ps.fuel_content
    FROM trip_parameters AS ps
    WHERE (ps.vehicle_id=p.vehicle_id)
    AND (ps.trip_paramid<p.trip_paramid)
         ORDER BY trip_paramid DESC
         LIMIT 1
    ) AS prev_content
  FROM trip_parameters AS p
  WHERE (p.vehicle_id=13)
  AND (creation_time>='2012-11-08')
  AND (creation_time<DATE_ADD('2012-11-08', INTERVAL 1 DAY))
  ORDER BY p.trip_paramid
) AS log
WHERE (fuel_content-prev_content)>2

答案 1 :(得分:0)

测试它:

select sum(t2.fuel_content-t1.fuel_content) TotalFuel,t1.vehicle_id,t1.trip_paramid as rowIdA,
t2.trip_paramid as rowIdB,
t1.creation_time as timeA,
t2.creation_time as timeB, 
t2.fuel_content fuel2,
t1.fuel_content fuel1,
(t2.fuel_content-t1.fuel_content)  diffFuel
from trip_parameters  t1, trip_parameters  t2
where t1.trip_paramid<t2.trip_paramid 
and t1.vehicle_id=t2.vehicle_id 
and t1.vehicle_id=13
and t2.fuel_content-t1.fuel_content>2 
order by rowIdA,rowIdB

其中(rowIdA,rowIdB)是所有可能的元组,没有重复,diffFuel是燃料数量和TotalFuel之间的差值是所有加油量的总和。

查询比较同一车辆的所有燃料含量差异(在此示例中,对于id = 13的车辆),并且仅比较差异燃料> 2时的燃料量。

问候。