Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SELF JOIN - Beispiel konstruieren (https://www.delphipraxis.net/138734-self-join-beispiel-konstruieren.html)

alzaimar 17. Aug 2009 10:41

Re: SELF JOIN - Beispiel konstruieren
 
Vielleicht mal ohne Self Join?
SQL-Code:
Select A.Datum,
      (Select Min (B.Datum - A.Datum)
         From Schadensfaelle B
        Where B.Datum>A.Datum) as AbstandZumNaechstenSchadensfall
  From Schadensfaelle A

DeddyH 17. Aug 2009 10:43

Re: SELF JOIN - Beispiel konstruieren
 
Da fehlt aber noch B.Datum ;)

alzaimar 17. Aug 2009 10:47

Re: SELF JOIN - Beispiel konstruieren
 
Wozu braucht man denn B.Datum, wenn sich das aus A.Datum + Differenz ergibt und es berechnete Felder in Delphi gibt und *lufhol* überhaupt?
Aber bitte :mrgreen: :
SQL-Code:
Select X.Datum as A-Datum,
       X.Datum+AbstandZumNaechstenSchadensfall as B-Datum,
       X.AbstandZumNaechstenSchadensfall
From (
  Select A.Datum,
      (Select Min (B.Datum - A.Datum)
         From Schadensfaelle B
        Where B.Datum>A.Datum) as AbstandZumNaechstenSchadensfall
  From Schadensfaelle A
) X

DeddyH 17. Aug 2009 10:48

Re: SELF JOIN - Beispiel konstruieren
 
Er möchte in seiner Ergebnismenge die beiden Daten sowie die Differenz haben.

Jürgen Thomas 17. Aug 2009 11:13

Re: SELF JOIN - Beispiel konstruieren
 
Und ich möchte ein Beispiel für SELF JOIN konstruieren (so steht es auch im Titel)! Jedenfalls vom Thema und der Theorie her ist meine Problemstellung dafür schließlich geeignet, oder etwa nicht? Ein und dasselbe Feld aus zwei verschiedenen Datensätzen derselben Tabelle - das ist doch der Kern von SELF JOIN?!

Für die Fragestellung "Abstände zwischen den Vorfällen" genügt eigentlich die Differenz. Aber in der Ergebnistabelle sagt das nicht allzuviel aus; deshalb sollten beide Datumsangaben mit zurückgeliefert werden. Alles klar?

Jürgen

Apollonius 17. Aug 2009 15:22

Re: SELF JOIN - Beispiel konstruieren
 
Ich würde von Detlefs Code in #6 ausgehen. So wie ich das sehe, wird lediglich einmal zu viel gegroupt. Wenn man nur nach der Fahrzeug-ID und a.Datum gruppiert und zusätzlich noch where a.Datum > b.Datum einfügt, müsste das klappen; statt b.Datum muss dann natürlich MAX(b.Datum) selektiert werden.
SQL-Code:
select a.Fahrzeug_Id, a.Datum, MAX(b.Datum), MIN(a.Datum - b.Datum)
from Schadensfaelle a
join Schadensfaelle b
  on b.Fahrzeug_Id = a.Fahrzeug_Id
where a.Datum > b.Datum
group by a.Fahrzeug_Id, a.Datum

Jürgen Thomas 17. Aug 2009 16:03

Re: SELF JOIN - Beispiel konstruieren
 
Klappt, danke! Jürgen

alzaimar 17. Aug 2009 17:40

Re: SELF JOIN - Beispiel konstruieren
 
Zitat:

Zitat von Jürgen Thomas
Ein und dasselbe Feld aus zwei verschiedenen Datensätzen derselben Tabelle - das ist doch der Kern von SELF JOIN?!

Ich dachte immer, das Problem auf elegante und einfach Art zu lösen, ist der Kern.

Als Paradebeispiel für Self joins würde ich rekursive Tabellen nehmen, bei denen also eine Spalte ein FK auf den PK der Tabelle (Arbeiter->Vorgesetzter). Da bleibt einem nichts anderes übrig, als ein Self Join zu nehmen.

Jürgen Thomas 18. Aug 2009 09:02

Re: SELF JOIN - Beispiel konstruieren
 
Zitat:

Zitat von alzaimar
Ich dachte immer, das Problem auf elegante und einfach Art zu lösen, ist der Kern.

Bitte verstehe mich nicht falsch: Grundsätzlich stimme ich dir natürlich zu. In meiner konkreten Situation (ich vervollständige auf WikiBooks Einführung in SQL) ging es mir wirklich ausdrücklich und ausschließlich um ein konstruiertes Beispiel für Self-Join.

Zitat:

Als Paradebeispiel für Self joins würde ich rekursive Tabellen nehmen, bei denen also eine Spalte ein FK auf den PK der Tabelle (Arbeiter->Vorgesetzter). Da bleibt einem nichts anderes übrig, als ein Self Join zu nehmen.
Danke, das werde ich noch berücksichtigen.

Danke jedenfalls nochmals für alle Hinweise! Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz