Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi LEFT JOIN mit Max-Wert aus der anderen Tabelle (https://www.delphipraxis.net/96816-left-join-mit-max-wert-aus-der-anderen-tabelle.html)

HolgerCW 31. Jul 2007 09:13

Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE

LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Hallo zusammen,

wie kann ich mit einem LEFT JOIN eine Tabelle verknüpfen, von der ich nur den Max-Wert haben will ?

So habe ich angefangen:

Delphi-Quellcode:
SELECT SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER FROM SYSDBP.DBP_LEISTUNGSWERTE
LEFT JOIN SYSDBP.DBP_AUFTRAEGE
ON SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER
AND MAX(SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT)
Wie muss ich das MAX umbauen ?

Gruss

Holger

DeddyH 31. Jul 2007 09:26

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Hallo,

das habe ich nicht ganz verstanden, was willst Du erreichen?

mkinzler 31. Jul 2007 09:35

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Es fehlt die eigentliche Bedingung

HolgerCW 31. Jul 2007 09:39

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
In der ersten Tabelle sind die Stammdaten,
in der zweiten die Aufträge,
jetzt möchte ich die beiden Tabellen so verbinden, das in der dann entstehenden Gesamttabelle nur das Datum des letzten Auftrages angezeigt wird.

Das ginge bestimmt mit einem Group by über die Gesamttabelle, aber da mache ich schon einen Count ...

Gruss

Holger

DeddyH 31. Jul 2007 09:45

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Du willst also die neuesten Aufträge anzeigen? Oder sollen alle Aufträge mit dem neuesten Auftragsdatum gelistet werden (das macht ja IMHO keinen Sinn)?

mkinzler 31. Jul 2007 09:45

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Da würde ich einen Subquery nehmen

HolgerCW 31. Jul 2007 09:56

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Ich möchte zu dem jeweiligen Stammdatensatz den letzten Auftrag ( neustes Datum ) anzeigen.

Dachte um es einfach zu halten, joine ich nur den jeweils letzten Auftrag. Die anderen Aufträge sind unrelevant.

Brauche das aktuelle Datum des letzten Auftrages für den jeweiligen Stammdatensatz.

Gruss

Holger

DeddyH 31. Jul 2007 09:59

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Ungetestet:
SQL-Code:
SELECT SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER,SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT
FROM SYSDBP.DBP_LEISTUNGSWERTE
JOIN SYSDBP.DBP_AUFTRAEGE
ON SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER
WHERE SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT =
(SELECT MAX(SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT)
 FROM SYSDBP.DBP_AUFTRAEGE)

HolgerCW 31. Jul 2007 10:05

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Ich versuche mal meine Abfrage hier abzubilden. Meine damit den relevanten Teil:

Delphi-Quellcode:
SELECT COUNT(SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER) AS DB_ANZAHL, SYSWVKISU.ANLAGE.ANLAGE

FROM (SYSWVKISU.ANLAGE

LEFT JOIN SYSDBP.DBP_LEISTUNGSWERTE
ON SYSWVKISU.ANLAGE.ANLAGE = SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER)

LEFT JOIN SYSDBP.DBP_AUFTRAEGE
ON SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER

GROUP BY SYSWVKISU.ANLAGE.ANLAGE
Wie bekomme ich hier den nur den MAX Wert von SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT

Gruss

Holger

DeddyH 31. Jul 2007 10:10

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Setze mal meine WHERE-Klausel unter Dein GROUP BY.

HolgerCW 31. Jul 2007 10:29

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Das habe ich nun gemacht.

Nur dann verschwinden alle Datensätze.

Wenn ich nun eine Erweiterung einbaue:

Delphi-Quellcode:
WHERE SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT = (SELECT MAX(SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT) FROM SYSDBP.DBP_AUFTRAEGE)
OR SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT IS NULL)
Dann sind alle Datensätze da, nur die wo Aufträge vorhanden sind, die fehlen

Was ist falsch ?

Gruss

Holger

DeddyH 31. Jul 2007 10:32

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Hallo,

lies Dir dies mal durch.

HolgerCW 31. Jul 2007 10:36

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Noch ein Anmerkung von mir, bevor ich weiter lese:

unter meinen Group by kann ich kein Where packen. Nur darüber ?

Gruss

Holger

DeddyH 31. Jul 2007 10:38

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Stimmt, mein Fehler.

HolgerCW 31. Jul 2007 10:48

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Hi,

aber wenn ich Deine WHERE - Bedingung herraus nehme, habe ich das was ich will. Nur werde ich nun Probleme bekommen, wenn mehr als ein Auftrag in der Tabelle Auftraege pro Stammdatensatz vorhanden ist.

Da muss noch ein Fehler in der WHERE - Bedingung sein ???

Gruss

Holger

DeddyH 31. Jul 2007 10:52

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Ich hoffe, ich habe Dich jetzt verstanden. Was Du suchst, müsste dies hier sein.

HolgerCW 31. Jul 2007 11:07

Re: LEFT JOIN mit Max-Wert aus der anderen Tabelle
 
Hätte ja nicht gedacht, das das so kompliziert ist, aber so klappt es nun:

Delphi-Quellcode:
...
LEFT JOIN SYSDBP.DBP_AUFTRAEGE
ON SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER
AND SYSDBP.DBP_LEISTUNGSWERTE.ANZAHL = SYSDBP.DBP_AUFTRAEGE.DB_REGISTER
AND SYSDBP.DBP_AUFTRAEGE.SIGMA_AUFTYP_ID = '50'
AND SYSDBP.DBP_AUFTRAEGE.STATUS = 'abgeschlossen'

WHERE

(SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT = (SELECT MAX(SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT)
FROM SYSDBP.DBP_AUFTRAEGE
WHERE SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER
AND SYSDBP.DBP_LEISTUNGSWERTE.ANZAHL = SYSDBP.DBP_AUFTRAEGE.DB_REGISTER
AND SYSDBP.DBP_AUFTRAEGE.SIGMA_AUFTYP_ID = '50'
AND SYSDBP.DBP_AUFTRAEGE.STATUS = 'abgeschlossen')
OR SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT IS NULL)
Gruss und vielen vielen dank

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 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