MySQL bekommen Unterschied zwischen max-und min-Werte für die Zeilen auszuwählen

Möchte ich eine Abfrage, wird der Unterschied zwischen der max-und min-Werte gruppiert nach Tag. Mein Versuch funktioniert nicht:

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`);

Jeder sub_meter einen Wert hat, vielleicht werden >3000, aber unterscheidet sich nur durch < 10 pro Tag. Ich will die Differenz, dh ein Ergebnis <10. Mit der obigen Abfrage bekomme ich die Ergebnisse >3000.

Diese Abfrage unten, nur wählt einen meter, und geben Sie das richtige Ergebnis, den max (17531), min (17523), und die Differenz (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)

Aber das hinzufügen eines weiteren meter in die in-Klausel, geben ein schlechtes Ergebnis ist das max 17531, und die min 3021, das diff ist 14510. Aber ich will das diff für jeden meter, und dann summiert.

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)

Einen weiteren Versuch, den ich versucht habe ist:

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' 
Verwandte: stackoverflow.com/questions/4152781/... stackoverflow.com/questions/8072231/...
Was nicht funktioniert, über das Ihre Suche? Fehlermeldung, Ungültiger Daten? Können Sie uns ein Beispiel für die Reaktion?
Ich bekomme ein Ergebnis, aber die Zahl ist viel zu hoch. Ich werde detailliert das erwartete Ergebnis vor.
haben Sie versuchen Sie, max(val) min(val) < 10 in der where-Klausel?

InformationsquelleAutor user1745767 | 2012-10-19

Schreibe einen Kommentar