LEFT OUTER JOIN mit MIN() verknüpft

BeSt79

Neuer Benutzer
Beiträge
2
Hallo.

Dies ist mein erster Post hier und ich hoffe sehr, dass irgendjemand mir helfen kann. Vielen Dank schon mal für eure Hilfe...

Ich habe 2 Tabellen:
  1. Tabelle "Firma"
    Code:
    idx  |  Name       
    ===========================
    001  |  Mustermann AG
    002  |  Schuster GbR
    003  |  Huber GmbH

  2. Tabelle "Wiedervorlage"
    Code:
    firma  |  Datum       |  erledigtAm
    =============================================
    001    |  2013-05-10  |  NULL
    002    |  2013-07-13  |  NULL
    001    |  2013-02-22  |  NULL
    003    |  2013-01-05  |  2013-03-12
Diese möchte ich mit einem LEFT OUTER JOIN verknüpfen und habe dazu dieses SQL-Statement gebaut:
Code:
SELECT f.idx, f.Name, w.Datum
       FROM firma f
       LEFT OUTER JOIN wiedervorlage w ON w.firma = f.idx
       WHERE w.erledigtAm IS NULL
             AND (
               von <= '2013-09-10 11:38:11'
               OR von IS NULL
             )

Damit bekomme ich dieses Resultset:
Code:
idx  |  Name            |  Datum
===========================
001  |  Mustermann AG   |  2013-05-10
002  |  Schuster GbR    |  2013-07-13
001  |  Mustermann AG   |  2013-02-22


Achtung, jetzt kommt die eigentliche Frage:

Wie schaffe ich es, dass ich im Resultset pro "Mandant" (linke Tabelle) nur 1 Zeile bekomme und zwar die mit dem kleinesten "Datum" aus der rechten Tabelle?

Ich habe bereits versucht einfach ein "SELECT DISTINCT" zu machen, aber das wird völlig ignoriert.

Ich habe schon alles mögliche (was mir eingefallen ist jedenfalls) versucht, aber alles war Erfolglos.
Daher hoffe ich nun auf euch Profis!

Danke für jeden Tip

LG
Benni
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Klassischer Fall von GROUP BY. Es geht auch anders (z.B. mit Subselect) aber davon würde ich aus Performance Gründen abraten.
Code:
SELECT    f.idx,
        f.Name,
        min(w.Datum) AS Datum
FROM    firma f
LEFT OUTER JOIN wiedervorlage w
ON        w.firma = f.idx
WHERE    w.erledigtAm IS NULL
AND (    von <= '2013-09-10 11:38:11'
OR        von IS NULL )
GROUP BY f.idx,f.Name
 
Werbung:

BeSt79

Neuer Benutzer
Beiträge
2
Wow... tatsächlich. Das war echt so einfach.
Ich fass´ es nicht.

Manchmal sieht man vor lauter Code die Statements nicht mehr... ;)

Vielen Dank, ukulele!

LG
Benni
 
Oben