eine neue Tabelle erstellen

Ich möchte jetzt Zeilen subtrahieren, die Messwerte zum Zeitpunkt t_2 minus Zeitpunkt t_1, t_3-t_2...
t_1 = 1395881400
Der Abstand von t_n zu t_n+1 ist immer 300.
Beim ersten Wert würde ein Fehler entstehen, da es keine Zeile zum Zeitpunkt t_0 gibt, also darf ich erst bei Zeile t_2 anfangen (WHERE A.zeit > 1395881400)

Ich habe das jetzt so gelöst:
Code:
# Hier sollen deltas gebildet werden:
# Startzeit: 139588140
# Zeitintervall aequidistant: 300 Sekunden

DROP TABLE IF EXISTS delta_bildung;
CREATE TABLE delta_bildung
SELECT
   A.zeit,
   A.mw11-B.mw11 AS d_mw11,
   A.mw12-B.mw12 AS d_mw12,
   A.mw21-B.mw21 AS d_mw21,
   A.mw22-B.mw22 AS d_mw22,
   A.mw31-B.mw31 AS d_mw31,
   A.mw32-B.mw32 AS d_mw32
FROM excel_report A
INNER JOIN excel_report B ON B.zeit=A.zeit-300
WHERE A.zeit > 1395881400

Es funktioniert so - auch mit dem inner-join, dass B_Zeit immer A.zeit-300 sein soll.

Gibt es noch eine bessere Variante?
 
Werbung:
Ich habe hier jetzt versucht, das Erstellen einer neuen Tabelle mit neuen Spalten hinzukriegen und auch Differenzen in einem Zug in weiteren Spalten zu bilden:
Code:
DROP TABLE IF EXISTS excel_report1;
CREATE TABLE excel_report1
SELECT
  p1.zeit,
  p1.mw1  as mw1_1,
  p1.mw2  as mw1_2,
  p2.mw1  as mw2_1,
  p2.mw2  as mw2_2,
  p3.mw1  as mw3_1,
  p3.mw2  as mw3_2,
  p1.mw1-diff_p1.mw1 as d_mw1_1,
  p1.mw2-diff_p1.mw2 as d_mw1_2,
  p2.mw1-diff_p2.mw1 as d_mw2_1,
  p2.mw2-diff_p2.mw2 as d_mw2_2,
  p3.mw1-diff_p3.mw1 as d_mw3_1,
  p3.mw2-diff_p3.mw2 as d_mw3_2
FROM messungen p1
  INNER JOIN messungen p2 on p1.zeit=p2.zeit
  INNER JOIN messungen p3 on p1.zeit=p3.zeit
  INNER JOIN messungen diff_p1 on diff_p1.zeit = p1.zeit-300
  INNER JOIN messungen diff_p2 on diff_p2.zeit = p2.zeit-300
  INNER JOIN messungen diff_p3 on diff_p3.zeit = p3.zeit-300
WHERE
  p1.geraet  = 0 AND
  p2.geraet  = 1 AND
  p3.geraet  = 2 AND
  diff_p1.geraet = 0 AND
  diff_p2.geraet = 1 AND
  diff_p3.geraet = 2 AND
  p1.zeit>1395881400;
Also, funktionieren tut es - aber gäbe es noch eine bessere Lösung?
 
Werbung:
Ginge das auch damit?:

Code:
 WHERE p1.geraet = 0 AND p2.geraet = 1 AND p3.geraet=2;
Das scheint zwar das gleiche Ergebnis anzuzeigen, ich weis aber nicht, ob es dennoch Probleme damit geben könnte, denn ihr habt sicherlich nicht ohne Grund gesagt, dass p1.geraet < p2.geraet sein soll, oder?

Geht natürlich auch. Ich hatte relative Parameter gewählt und du absolute. Mein Beispiel funktioniert auch mit Strings und unabhängig von der tatsächlichen Bezeichnung solange sie unterschiedlich ist.

Deine Variante ist weniger flexibel. Aber dafür besser lesbar.
 
Zurück
Oben