2

4つのフィールドを持つ1つのテーブルがあります。

trip_paramid, creation_time, fuel_content,vehicle_id

2つの行の違いを見つけたいです。私のテーブルには1つのフィールドfuel_contentがあります。2分ごとにパケットを取得してデータベースに挿入しています。これから総給油量を調べたいです。2つのパケット間の燃料含有量が2、給油量として扱います。同じ日に複数の給油が発生する可能性があるため、車両の1日の総給油量を調べたいと思います。sqlfiddleで1つのテーブルスキーマとサンプルデータを作成しました。誰かがこれの解決策を見つけるのを手伝ってくれますか?ここにテーブルスキーマのリンクがあります..http://www.sqlfiddle.com/#!2 / 4cf36

4

2 に答える 2

2

ここに良いクエリがあります。

パラメータ (vehicle_id=13) と (date='2012-11-08') がクエリに挿入されますが、これらは変更されるパラメータです。

の代わりにcreation_time<..and inを使用して式を選択したことに注意してください。これは、最初の式では "creation_time" のインデックスを使用できますが、2 番目の式では使用できないためです。creation_time>..DATE(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
于 2012-11-12T13:26:35.040 に答える
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 を超える場合は合計燃料量のみを比較します。

よろしく。

于 2012-11-12T11:51:02.753 に答える