AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SELF JOIN - Beispiel konstruieren
Thema durchsuchen
Ansicht
Themen-Optionen

SELF JOIN - Beispiel konstruieren

Ein Thema von Jürgen Thomas · begonnen am 16. Aug 2009 · letzter Beitrag vom 18. Aug 2009
Antwort Antwort
Seite 2 von 2     12   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: SELF JOIN - Beispiel konstruieren

  Alt 17. Aug 2009, 10:41
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
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: SELF JOIN - Beispiel konstruieren

  Alt 17. Aug 2009, 10:43
Da fehlt aber noch B.Datum
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: SELF JOIN - Beispiel konstruieren

  Alt 17. Aug 2009, 10:47
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 :
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
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: SELF JOIN - Beispiel konstruieren

  Alt 17. Aug 2009, 10:48
Er möchte in seiner Ergebnismenge die beiden Daten sowie die Differenz haben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#15

Re: SELF JOIN - Beispiel konstruieren

  Alt 17. Aug 2009, 11:13
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: SELF JOIN - Beispiel konstruieren

  Alt 17. Aug 2009, 15:22
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
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#17

Re: SELF JOIN - Beispiel konstruieren

  Alt 17. Aug 2009, 16:03
Klappt, danke! Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: SELF JOIN - Beispiel konstruieren

  Alt 17. Aug 2009, 17:40
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#19

Re: SELF JOIN - Beispiel konstruieren

  Alt 18. Aug 2009, 09:02
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:39 Uhr.
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