Es muß natürlich nicht unbedingt "physisch" mit in die erste Tabelle rein und wenn doch, dann könnte man sich die zweite Tabelle auch sparen, da man deren Daten aus der Ersten auslesen könnte.
SQL-Code:
-- Onlinezeiten je als ein Datensatz, von Beginn bis Ende
SELECT Event, Date, Begin, Begin+Duration AS End, Duration, System FROM EventTabelle
UNION
SELECT '...', Date, Begin, End, End-Begin AS Duration, 'Onlinetime' AS System FROM OnlineTabelle
ORDER BY Date, Begin, End
oder
SQL-Code:
-- Onlinezeiten je als zwei Datensätze, für Beginn und Ende
SELECT Event, Date, Begin, Begin+Duration AS End, Duration, System FROM EventTabelle
UNION
SELECT '...', Date, Begin, Begin AS End, 0 AS Duration, 'Online' AS System FROM OnlineTabelle
UNION
SELECT '...', Date, End AS Begin, End, 0 AS Duration, 'Offline' AS System FROM OnlineTabelle
ORDER BY Date, Begin, End
Beim Berechnen müsstest du dann nur mit überschneidenden Zeiten bissl aufpassen, also wo zwei Events übereinander liegen, vorallem bezüglich der "Online"-Zeiten, im ersten Beispiel.
Bezüglich der Duration müsste man noch aufpassen, dass hier auch mit der richtigen Zeiteinheit verrechnet wird, da das ja nur Integer sind und es Stunden/Minuten/Sonstwas sein könnten,
also vermutlich sowas wie
(Begin + CAST(Duration || ' mins' AS INTERVAL)) AS End
.
Im UNION SELECT muß das "... AS Feldname" nicht angegeben werden, aber man darf. (es werden die Namen des ersten SELECT in der Ausgabe stehen)