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