Schlumpf: Satz mit kleinstem Datum und weiteren Feldern

Hallo,

bei der Buchung von Hotelzimmern möchte ich pro Zimmer die nächste Buchung finden und den Namen des Gastes dazu. Vereinfacht:

*buchungen*
id tag        zi_nr adr_id
-- ---------- ----- ------
 1 2010-10-01     1     13
 2 2010-10-15     5      2
10 2010-09-28     1      5
 1 2010-10-15     1      5
 1 2010-09-15     5      2

*adressen*
id name
-- -----------
 2 Müller
 5 Schröder
13 Meisel

*ausgabe*
tag        zi_nr name
---------- ----- ------------
2010-09-28     1 Schröder
2010-09-15     5 Müller

Wenn ich nach zi_nr gruppiere und den kleinsten tag möchte, verliere ich ja normalerweise die adr_id. Ein kleiner Trick:

SELECT
 zi_nr
,MIN( CONCAT( tag, adr_id ) ) tag_adr
FROM adressen
GROUP BY zi_nr
ORDER BY tag_adr

So, wie kommt jetzt der Name aus der anderen Tabelle dazu?

Pfiffig wäre ja, mit JOIN die adressen dazuzubinden und dann diesen:

MIN( CONCAT( tag, adr_id, name ) ) tag_adr

aber name aus der anderen Tabelle kann mit CONCAT offenbar nicht hinzugefügt werden. Irgendwie steh ich auf dem Schlauch, kann doch nicht so schwer sein.

MfG Schlumpf

  1. bei *buchungen* bitte die id Spalte als gelöscht denken. Habe ich vor dem Abschicken vergessen, die buchungs_id tut hier nichts zur Sache.

    1. CONCAT über mehrere Tabellen geht doch.

      Weiss nicht, wo vorhin der Fehler war.

      Danke fürs aktive Lesen.

      Schlumpf

  2. Hallo,

    bei der Buchung von Hotelzimmern möchte ich pro Zimmer die nächste Buchung finden und den Namen des Gastes dazu. Vereinfacht:

    Wenn ich nach zi_nr gruppiere und den kleinsten tag möchte, verliere ich ja normalerweise die adr_id. Ein kleiner Trick:

    SELECT
    zi_nr
    ,MIN( CONCAT( tag, adr_id ) ) tag_adr
    FROM adressen
    GROUP BY zi_nr
    ORDER BY tag_adr

    mit diesem Trick musste man sich bis zur schon seit Jahren toten MySQL-Version 4.0 behelfen.

    Pfiffig wäre ja

    korrelierte Unterabfragen zu verwenden.

    Freundliche Grüße

    Vinzenz