Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Harte SQL-Nuss - Abfrage formulieren (https://www.delphipraxis.net/11583-harte-sql-nuss-abfrage-formulieren.html)

Tonic1024 10. Nov 2003 11:37


Harte SQL-Nuss - Abfrage formulieren
 
Moin...

Ich habe da eine knobelaufgabe, die meine Kenntnisse Überfordert...

Ich habe einen Haufen Quasi zusammenhangloser Datensätze (Die haben einen Zusammenhang, der hierfür keine Rolle spielt) - eine Art Logfile. Nun markiert ein Datensatzt den Beginn eines Ereignisses (Code = x) und ein Datensatz das Ende eines Ereignisses (Code = y). Haben will ich alle Datensätze, die innerhalb dieses Ereignisses angelegt wurden.

jetzt müsste ja eine Abfrage die in etwas so ausschaut das Problem lösen:
Delphi-Quellcode:
SELECT * FROM TABELLE WHERE beginnzeit BETWEEN
(SELECT beginnzeit AS Beginn FROM DieSelbeTabelle WHERE code = x) AND
(SELECT beginnzeit AS Ende FROM DieSelbeTabelle WHERE code = y);
Oder so ähnlich...

Nun ist es aber ja so, dass BETWEEN zwei Values haben will und nicht zwei tabellen... Ich habe auch schon allerhand mit Inner Join's rumhantiert, aber irgendwie will das nicht :lol:

Das Problem ist zusätzlich, dass ich darauf angewiesen bin, dass ich nur eine Anfrage absetze und ebenfalls nur eine Tabell zurückbekomme. Sonst hätt ich Delphi das sortieren lassen nachdem ich alles übertragen hätte... :)
Das kann ich zwar immernoch, aber es ist A.) nicht besonders elegant und B.) recht viel Datensalat...

Wär echt cool, wenn einer der SQL-Cracks mal einen Tip für mich hätte...

Bis denne...

Garby 10. Nov 2003 11:48

Re: Harte SQL-Nuss - Abfrage formulieren
 
Hallo,

dein Beispiel sollte eigentlich funktionieren.
Welche DB und welche Komponenten verwendest du?

r_kerber 10. Nov 2003 11:52

Re: Harte SQL-Nuss - Abfrage formulieren
 
Hallo Tonic1024,

Dein Select sollte so funktionieren, vorausgesetzt das Ergebnis der beiden SubQueries liefert nur einen Datensatz.

Tonic1024 10. Nov 2003 12:05

Re: Harte SQL-Nuss - Abfrage formulieren
 
Hm, ja. Ihr habt ja Recht.

Und genau da liegt das Problem. Da der Zeitraum vom User festgelegt werden können muss, kann ich mich da ja nicht drauf verlassen... Können auch 2, 4, 100 sein...

Im Moment - in der TestPhase - benutze ich nur den Borland Datenbank-Explorer um einen Funktionsfähigen String auszuprobieren. Das DBMS ist IB6 via ODBC. Ob ODBC im Programm so bleibt ist aber noch die Frage...

r_kerber 10. Nov 2003 12:15

Re: Harte SQL-Nuss - Abfrage formulieren
 
Hallo Tonic1024,

das verstehe ich jetzt nicht. Ein Zeitraum wird doch immer nur von zwei Datümern begrenzt. Wie kann das ein User anders festlegen?

Tonic1024 10. Nov 2003 12:21

Re: Harte SQL-Nuss - Abfrage formulieren
 
Äh... die Frage verstehe ich jetzt aber nicht... :-D

Es handelt sich um eine Art Logfile... Das Ereignis kann auch zweimal am Tag auftreten, aber der User kann sich alle ereignisse der ganzen Woche anzeigen lassen... sind also 28 ereignisse. 2 mal start und 2 mal ende pro Tag - rein fiktiv...

r_kerber 10. Nov 2003 12:25

Re: Harte SQL-Nuss - Abfrage formulieren
 
Das wären dann aber mehrere Zeiträume, also z.B. einma von 07:30 bis 09:15 und dann noch einmal von 10:25 bis 11:00. Verstehe ich das jetzt richtig?

Tonic1024 10. Nov 2003 12:32

Re: Harte SQL-Nuss - Abfrage formulieren
 
Und genau da liegt der hase im Pfeffer

Ich benötige Alle Zeiträumedie zu dem Ereignis gehören wobei mehrere Ereignis-Zeiträume zu einem vom User ausgewählten Zeitraum gehören.

Ich habe also, wie ich in der Frage versucht habe zu formulieren, eine Tabelle mit Start-Ereignissen und eine Tabelle mit Ende-Ereignissen als Resultat der SubQueries. Das geht nicht mit Between. Soweit war ich schon...

Ich versuche gerade das mit Joins zu realisieren, damit ich diese "Makro-Tabelle" dann mit WHERE, AND, OR etc selectieren kann...

Oder geht das etwa garnicht?!?! [zitter]

MrSpock 10. Nov 2003 12:36

Re: Harte SQL-Nuss - Abfrage formulieren
 
Hallo Tonic,

falls du mehrere Datensätze bekommst, solltest du das Ergebnis der Unterselect - Statement mit z.B. MAX auf einen Wert beschränken:


SQL-Code:
SELECT * FROM TABELLE WHERE beginnzeit BETWEEN
(SELECT MAX(beginnzeit) AS Beginn FROM DieSelbeTabelle WHERE code = x) AND
(SELECT MAX(beginnzeit) AS Ende FROM DieSelbeTabelle WHERE code = y);

Tonic1024 10. Nov 2003 12:48

Re: Harte SQL-Nuss - Abfrage formulieren
 
Das Problem ist Umfangreich, ich weiss... hab selbst ne Weile gebraucht bis ich es begriffen hab...

Also, nehmen wir der Einfachheit an es handelt sich um ein Server Log-file mit Ausfall-Meldugen und Störung-behoben-Meldungen (etwas an den Haaren herbeigezogen - ich weiss). Ich müsste dann schon alle Ausfälle sehen inklusive der Datensätze die dazwischen liegen z.B. Aktionen die wegen der Störung nich ausgeführt wurden oder fehlgeschlagene Versuche den Fehler zu beheben.

Ich möchte aus Performance-Gründen nur ungern ALLE angefallenen Datensätze des Ausgewählen Zeitraums übertragen und Delphi schauen lassen ob ein Ausfall drin ist, obwohl das wohl einfacher wäre.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz