vmb
vmb

Reputation: 3028

Difference between rows Mysql Query

I have one table which is having four fields:

trip_paramid, creation_time, fuel_content,vehicle_id

I want to find the difference between two rows.In my table i have one field fuel_content.Every two minutes i getting packets and inserting to database.From this i want to find out total refuel quantity.If fuel content between two packets is greater than 2,i will treat it as refueling quantity.Multiple refuel may happen in same day.So i want to find out total refuel quantity for a day for a vehicle.I created one table schema&sample data in sqlfiddle. Can anyone help me to find a solution for this.here is the link for table schema..http://www.sqlfiddle.com/#!2/4cf36

Upvotes: 2

Views: 1244

Answers (2)

Skrol29
Skrol29

Reputation: 5597

Here is a good query.

Parameters (vehicle_id=13) and (date='2012-11-08') are injected in the query, but they are parameters to be modified.

You can note that have I chosen an expression using creation_time<.. and creation_time>.. in instead of DATE(creation_time)='...', this is because the first expression can use indexes on "creation_time" while the second one cannot.

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

Upvotes: 2

esmoreno
esmoreno

Reputation: 666

Test it:

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

where (rowIdA,rowIdB) are all possibles tuples without repetition, diffFuel is the difference between fuel quantity and TotalFuel is the sum of all refuel quanty.

The query compare all fuel content diferences for same vehicle(in this example, for vehicle with id=13) and only sum fuel quantity when the diff fuel is >2.

Regards.

Upvotes: 0

Related Questions