Die generelle Frage ist, ob man das Ein-/Auschalten nicht einfach mit in die Event-Tabelle schreibt (Es ist ja schließlich auch nur ein Ereignis) mit einer Dauer von
null.
Eine zusätzliche Tabelle mit den Events und deren Beschreibung würde ich auch empfehlen, denn dort lassen sich dann auch noch bei Bedarf Meta-Informationen ablegen, die für die weitere Verarbeitung relevant sind.
Für ein konkrete Abfrage benötigt man natürlich auch das konkret gewünschte Ergebnis.
Für die angesprochene Fragestellung reicht für eine qualifizierte Aussage eine Abfrage nicht aus.
Ich erstelle mir für so etwas gerne eine/mehrere Klassen, die beschreiben, was ich denn eigentlich haben möchte. In diesem Fall wohl so etwas wie:
Delphi-Quellcode:
TSomeResult = class
public
property QueryStart: TDateTime;
property QueryDuration: TTimeSpan;
property QueryEvents: TArray<string>;
property SystemUptimeTotal: TTimeSpan;
property DowntimeTotal: TTimeSpan;
property SystemEvents: TList<TSystemEvent>;
end;
und das holt man sich dann über
Delphi-Quellcode:
function GetEvents( aFrom, aUntil: TDateTime ): TSomeResult;
function GetEvents( aFrom: TDateTime; aDuration: TTimeSpan ): TSomeResult;
function GetEvents( aFrom, aUntil: TDateTime; aMatchingEvents: array of string ): TSomeResult;
function GetEvents( aFrom: TDateTime; aDuration: TTimeSpan; aMatchingEvents: array of string ): TSomeResult;