日ごとにグループ化された最大値と最小値の差を取得するクエリが必要です。私の試みはうまくいきません:
SELECT date(`date`),
(max(value) - min(value)) as value,
FROM `sub_meter_data`
where date(sub_meter_data.date) > '2012-10-01'
and sub_meterID in('58984','58985','58986','58987')
group by date(`date`);
各sub_meterの値は、3000を超える可能性がありますが、1日あたりの違いは10未満です。違い、つまり結果<10が必要です。上記のクエリでは、3000を超える結果が得られます。
以下のこのクエリでは、1つのメーターを選択するだけで、正しい結果、最大(17531)、最小(17523)、および差(8)が得られます。
SELECT date(sub_meter_data.date) as date,
max(value) as max_meter,
min(value) as min_meter,
max(value) - min(value) as diff,
FROM `sub_meter_data`
where date(sub_meter_data.date) > '2012-10-01'
and sub_meterID in('57636')
group by date(sub_meter_data.date)
しかし、in句に別のメーターを追加すると、悪い結果が得られます。最大値は17531、最小値は3021、差分は14510です。ただし、各メーターの差分を合計してから、合計します。
SELECT date(sub_meter_data.date) as date,
max(value) as max_meter,
min(value) as min_meter,
max(value) - min(value) as diff,
FROM `sub_meter_data`
where date(sub_meter_data.date) > '2012-10-01'
and sub_meterID in('57636', '57628')
group by date(sub_meter_data.date)
私が試したもう1つの試みは次のとおりです。
SELECT date(sub_meter_data.date) as date,
sum(CASE WHEN sub_meterID = '57628' OR sub_meterID = '57636' THEN (max(value) - min(value)) ELSE 0 END) as value
FROM `sub_meter_data`
where date(sub_meter_data.date) > '2012-10-01'