Einzelnen Beitrag anzeigen

HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#13

AW: Otimierung SQL Abfrage oder Logik

  Alt 13. Dez 2015, 17:29
Zu erst mal möchte ich Bug zustimmen: Wenn nicht gemessen wird zeig auch nichts an. Der Vergleich mit dem EKG hinkt. Denn das EKG misst auch wenn es pieep macht, nur das der Wert eben 0 ist. Deine waagerechten farbigen Linien stellen aber ein Wert da, nur dass dieser gar nicht gemessen wurde, ist dann also eigentlich eine Falschaussage.

Zu den fehlenden Werten. Probier mal folgendes: Leg ein Tabelle mit den Datum aller Tage über einen Zeitraum von, sagen wir mal 10 Jahren (macht gerade mal ca. 36500 Datensätze) an:
Code:
create table T_DATUM (
  DATUM date not null,
  UNIX_START int not null,
  UNIX_END int not null,
  primary key DATUM
);
Dann die Tabelle entsprechend füllen und und baue dein SELECR um:
Code:
select
  rd.F_PARAMETER_ID,
  -- damit auch ein Timestamp zurückgegeben wird, wenn keine Daten da sind
  case when rd.F_TIMESTAMP_UNIX = null then d.UNIX_START else rd.F_TIMESTAMP_UNIX end as F_TIMESTAMP_UNIX,
  rd.F_POWER_STATE,
  rd.F_VALUE,
  mt.F_TYPE_ID
from
  T_DATUM d
  left outer join T_RECORD_DATA rd ON rd.F_TIMESTAMP_UNIX between d.UNIX_START and d.UNIX_END
  inner join T_DEVICE_PARAMETERS dp on dp.ID = rd.F_PARAMETER_ID
  inner join T_MEASURE_TYPES mt on mt.ID = dp.F_MEASURE_TYPE_ID
where
  rd.F_PARAMETER_ID = 1060 and d.DATUM between <startzeitpunkt> and <endzeitpunkt> -- jetzt aber als DATE formatiert
order by
  rd.F_TIMESTAMP_UNIX desc
Alles ungetestet (habe keine Firebord DB.
  Mit Zitat antworten Zitat