Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL - Abfrage mit Max (https://www.delphipraxis.net/100326-sql-abfrage-mit-max.html)

ken_jones 26. Sep 2007 12:47

Re: SQL - Abfrage mit Max
 
Du bist nahe dran, aber syntaktisch etwas im Schilf,
das hier entspricht etwa deinem SQL, einfach Oracle tauglich umgestellt:

SQL-Code:
select t1.auftragnr, t1.text, max(t2.datum)
from tabelle1 t1,
     tabelle2 t2
where t1.auftragnr = t2.auftragnr
and t2.datum < trunc(sysdate)
group by t1.auftragnr, t1.text
und um dein Beispiel zu testen:

SQL-Code:
select t1.auftragnr, t1.text, max(t2.datum)
from tabelle1 t1,
     tabelle2 t2
where t1.auftragnr = t2.auftragnr
and t2.datum < to_date('12.Oct.2007') --trunc(sysdate)
group by t1.auftragnr, t1.text
Das würde dann als Resultat folgendes ausspucken:

Code:
AUFTRAGNR TEXT   MAX(T2.DATUM)
1         test1   11.10.07
2         test2   11.10.07

Hansa 26. Sep 2007 12:52

Re: SQL - Abfrage mit Max
 
Zitat:

Zitat von HolgerCW
So würde es klappen,

nur muss die Abfrage auf das Maximale Datum gehen..

Deshalb das DESC, also absteigend sortiert (größtes zuerst und wegen FIRST 1 eben nur eines). Um die Aufträge auseinanderzuhalten notfalls noch :

SQL-Code:
ORDER BY DATUM, AUFTRAGSNR

HolgerCW 26. Sep 2007 12:57

Re: SQL - Abfrage mit Max
 
Zitat:


Das würde dann als Resultat folgendes ausspucken:

Code:
AUFTRAGNR TEXT   MAX(T2.DATUM)
1         test1   11.10.07
2         test2   11.10.07

-> Und genau das wollte ich ja nicht. Auftragsnummer 1 dürfte nicht ausgegeben werden, da das maximale Datum von Auftragsnummer 1 grösser als der 12.10.2007 ist
-> Deshalb muss ich ja das Maximale Datum abfragen, aber wie ?

Weiss hier jemand wie das

[/quote]
Delphi-Quellcode:
select first 1 XY from Z order by Datum desc;
[quote]

in Oracle geht ?

Gruss

Holger

DeddyH 26. Sep 2007 13:13

Re: SQL - Abfrage mit Max
 
Andere Idee (ungetestet):
SQL-Code:
SELECT A.AuftragNr, A.Text, MAX(B.Datum)
FROM Tabelle1 A
JOIN Tabelle2 B ON B.AuftragNr = A.AuftragNr
WHERE NOT EXISTS(
    SELECT * FROM Tabelle2 C
    WHERE TRUNC(C.Datum) >= sysdate
    AND C.AutragNr = B.AuftragNr)
GROUP BY A.Auftragnr,A.Text
//Edit: Im Subselect muss es Tabelle2 heißen

ken_jones 26. Sep 2007 13:29

Re: SQL - Abfrage mit Max
 
Ah so, sorry, hab deinen Text zu schnell gelesen.
Dann halt so rum:

SQL-Code:
select t1.auftragnr, t1.text, max(t2.datum)
from tabelle1 t1,
     tabelle2 t2
where t1.auftragnr = t2.auftragnr
group by t1.auftragnr, t1.text
having max(t2.datum) < to_date('12.Oct.2007') --sysdate

HolgerCW 26. Sep 2007 15:17

Re: SQL - Abfrage mit Max
 
Beide Lösungen klappen einwandfrei.

Super danke

Gruss

Holger

Hansa 26. Sep 2007 17:07

Re: SQL - Abfrage mit Max
 
Wie ist es dir gelungen mit "FIRST 1" zwei Datensätze zurück zu bekommen ? :shock:

HolgerCW 27. Sep 2007 08:50

Re: SQL - Abfrage mit Max
 
Habe die Lösungen von DeddyH und ken_jones ausprobiert. Die haben geklappt.

Gruss

Holger


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

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