In Ermangelung einer entsprechenden Datenbank (und daher ungetestet) hier ein Vorschlag, wie er unter Oracle funktionieren könnte:
Delphi-Quellcode:
select *
from Tabelle1,
Tabelle2,
(Select Max(AAZaehler) As AAZaehler
from Tabelle2
where Kriterium = 'ID'
and AAStatus <> 'Erledigt'
) MaxAAZaehler
where Tabelle1.BNummer = Tabelle2.BNummer (+)
and Tabelle1.Feld1 = '4EE'
and Tabelle1.Feld2 = 'Frankfurt'
and Tabelle2.aazaehler = MaxAAZaehler.aazaehler
union
select *
from Tabelle1,
Tabelle2,
(Select Max(AAZaehler) As AAZaehler
from Tabelle2
where Kriterium = 'ID'
and AAStatus <> 'Erledigt'
) MaxAAZaehler
where Tabelle1.BNummer = Tabelle2.BNummer (+)
and Tabelle1.Feld1 = '4EE'
and Tabelle1.Feld2 = 'München'
and Tabelle2.aazaehler = MaxAAZaehler.aazaehler;
Sofern die "Oraclevariante" nicht funktioniert eine View anlegen:
Delphi-Quellcode:
create view V_MaxAAZaehler as
Select Max(AAZaehler) As AAZaehler
from Tabelle2
where Kriterium = 'ID'
and AAStatus <> 'Erledigt'
und dieses
SQL probieren:
Delphi-Quellcode:
select *
from Tabelle1,
Tabelle2,
V_MaxAAZaehler
where Tabelle1.BNummer = Tabelle2.BNummer
and Tabelle1.Feld1 = '4EE'
and Tabelle1.Feld2 = 'Frankfurt'
and Tabelle2.aazaehler = V_MaxAAZaehler.aazaehler
union
select *
from Tabelle1,
Tabelle2,
V_MaxAAZaehler
where Tabelle1.BNummer = Tabelle2.BNummer
and Tabelle1.Feld1 = '4EE'
and Tabelle1.Feld2 = 'München'
and Tabelle2.aazaehler = V_MaxAAZaehler.aazaehler
oder eventuell auch
Delphi-Quellcode:
select *
from Tabelle1,
Tabelle2,
V_MaxAAZaehler
where Tabelle1.BNummer = Tabelle2.BNummer
and Tabelle1.Feld1 = '4EE'
and (Tabelle1.Feld2 = 'Frankfurt' or Tabelle1.Feld2 = 'München')
-- bzw.
-- and Tabelle1.Feld2 in ('Frankfurt','München')
and Tabelle2.aazaehler = V_MaxAAZaehler.aazaehler
Konstrukte dieser Art:
... and Tabelle2.aazaehler = (Select Max(AAZaehler) from Tabelle2 AA where AA.BNummer = Tabelle1.BNummer...
haben sich in der Vergangenheit bei meinen Implementierungen häufig als arge Flaschenhälse oder Perfomancekiller herausgestellt, so dass ich es tunlichst vermeide, derartige Konstrukte zu verwenden.
Je nach Datenbank und Cleverness des Optimierers kann es sein, dass das Subselect in der Wherebedingung je Datensatz ausgeführt wird. Hier kommen dann auch bei wenigen Millisekunden für die Ausführung des Subselectes für einen Datensatz, doch recht schnell sehr hohe Laufzeiten für ein paar tausend Datensätze heraus.