AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabellen miteinander verknüpfen u. Queries geschickt formulieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tabellen miteinander verknüpfen u. Queries geschickt formulieren

Ein Thema von Rülps · begonnen am 20. Jul 2016 · letzter Beitrag vom 21. Jul 2016
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Tabellen miteinander verknüpfen u. Queries geschickt formulieren

  Alt 21. Jul 2016, 10:26
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Rülps

Registriert seit: 26. Sep 2008
38 Beiträge
 
#2

AW: Tabellen miteinander verknüpfen u. Queries geschickt formulieren

  Alt 21. Jul 2016, 13:51
Danke für die Tipps!
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.
Geniale Idee! Ich weiß schon, warum ich hier nachfrage
Thx, habt mir sehr geholfen!
*Doppel-Rülps*
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#3

AW: Tabellen miteinander verknüpfen u. Queries geschickt formulieren

  Alt 21. Jul 2016, 14:56
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, 'OnlinetimeAS 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, 'OnlineAS System FROM OnlineTabelle
UNION
SELECT '...', Date, End AS Begin, End, 0 AS Duration, 'OfflineAS 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 || ' minsAS 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)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (21. Jul 2016 um 15:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Tabellen miteinander verknüpfen u. Queries geschickt formulieren

  Alt 21. Jul 2016, 22:20
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.
Ich denke das kommt darauf an.
Wenn das Mainsystem eingeschaltet wird ist das ein Event, die Frage ist ob die Eventdauer dann bis zum ausschalten geht, gibt es das Event "ausgeschaltet" als Beendigung von "eingeschaltet" und wenn es hierfür zwei Events gibt, gibt es für andere Events dann auch Beginn und Ende? Was man wählt ist meiner Meinung nach egal, nur mal so mal so halte ich für nicht so gelungen.
Auch wenn sich zwei Events überschneiden, halte ich das für nicht so schlimm, solange jeweils ein Subsystem betroffen ist. Interessant wird es wenn ein Subsystem gleichzeitig zwei Events hat, oder die Dauer eines Subsystemevents über den Ausschaltpunkt des Hauptsystems hinaus geht.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz