Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySql Query for generating report

Tags:

sql

mysql

I have one table which is having three fields:

Id, Creation Time, Fuel Level

Every two minutes we are getting data and inserting to database.For generating a fuel credit/debit statement i want to get starting(Stating of the day) and ending(End of the Day) Fuel Level.Can anyone help to form a query to generate this report?

Search parameters will be date range.

Id=10;creation time =2019-02-15 16:32:59;Fuel Level =20

I created one sample schema here http://sqlfiddle.com/#!2/76dd5

like image 205
vmb Avatar asked Jan 20 '26 03:01

vmb


2 Answers

First, for a query that provides the change in fuel for each vehicle for each day, you can use the following SQL:

SELECT trip_range.dt
     , trip_range.vehicle_id
     , st.fuel_content as start_fuel_content
     , en.fuel_content as end_fuel_content
     , en.fuel_content - st.fuel_content as fuel_change
  FROM (
SELECT tp.vehicle_id, DATE(tp.creation_time) dt
     , MIN(tp.creation_time) start_time
     , MAX(tp.creation_time) end_time
  FROM trip_parameters tp
 GROUP BY tp.vehicle_id, DATE(tp.creation_time)
) as trip_range
  JOIN trip_parameters st
    ON st.vehicle_id = trip_range.vehicle_id
       AND st.creation_time = trip_range.start_time
  JOIN trip_parameters en
    ON en.vehicle_id = trip_range.vehicle_id
       AND en.creation_time = trip_range.end_time
 WHERE trip_range.dt BETWEEN '2012-11-08' AND '2012-11-09'

If you want the Cumulative change in fuel across all vehicles for each day in the range, the following SQL should work:

SELECT dt, SUM(fuel_change) as fuel_change
  FROM (
SELECT trip_range.dt
     , en.fuel_content - st.fuel_content as fuel_change
  FROM (
SELECT tp.vehicle_id, DATE(tp.creation_time) dt
     , MIN(tp.creation_time) start_time
     , MAX(tp.creation_time) end_time
  FROM trip_parameters tp
 GROUP BY tp.vehicle_id, DATE(tp.creation_time)
) as trip_range
  JOIN trip_parameters st
    ON st.vehicle_id = trip_range.vehicle_id
       AND st.creation_time = trip_range.start_time
  JOIN trip_parameters en
    ON en.vehicle_id = trip_range.vehicle_id
       AND en.creation_time = trip_range.end_time
 WHERE trip_range.dt BETWEEN '2012-11-08' AND '2012-11-09'
) change_by_vehicle
 GROUP BY 1

Hope this helps!

john...

like image 185
John Fowler Avatar answered Jan 21 '26 16:01

John Fowler


Try below:

   SELECT Id, CreationTime, FuelLevel
   FROM MYTABLE
   WHERE DATE(CreationTime) = CURDATE();

This gets the date part of CreationTime and compares against current date, thus returns all records created today.

like image 44
Yogendra Singh Avatar answered Jan 21 '26 16:01

Yogendra Singh



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!