Einzelnen Beitrag anzeigen

Benutzerbild von p80286
p80286

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

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 11. Sep 2017, 17:21
SQL-Code:
where 1=1
  and max(KP.SDATETIME) as datum
sollte da mal korrigiert werden, die erste Zeile enthält eine überflüssige Bedingung, da immer erfüllt und die zweite Zeile enthält nur einen Ausdruck, keine Bedingung.
Oh pardon, da hab ich den typischen CopynPaste-Mist gebaut.
Das 1=1 oder 1=2 nutze ich um die angefragten Felder(Namen) zurück zu bekommen und um ggf. Konstrukte wie
Delphi-Quellcode:
 sqltxt.Add(' and Feld=wert ';
 sqltxt.Add(' and Person.sex=female';
 if irgendeinwert then
  sqltxt.Add(' and Feld2 is not null';
enzusetzen. Ist nur meine pers. Marotte.

Um die beiden Datensätze mit dem neuesten/jüngsten Datum zu erhalten mußt Du jetzt nur noch Deinen ursprünglichen Ansatz verfolgen:
SQL-Code:
  .....
  join (select k.id,max(KP.ABDatum) datum
FROM
   Kreditoren as k
     join Rel_Kreditor_Artikel KAr on k.ID=KAr.Kreditor_ID
     join Kreditor_Artikel KA on KA.ID=KAr.Kreditor_Art_ID
     join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID=KA.ID
     Join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID=KP.ID
Group by k.ID ) mindate on (mindate.id=k.id and mindate.datum=kp.sdatetime)
ggf. mußt Du noch die Aliase und das/die Datumsfelder anpassen, aber ich hoffe das Prinzip ist deutlich geworden.

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