Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

LEFT OUTER JOIN mit MIN() verknüpft

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von BeSt79, 10 September 2013.

  1. BeSt79

    BeSt79 Neuer Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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
     
  3. BeSt79

    BeSt79 Neuer Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden