Satz mit kleinstem Datum und weiteren Feldern
Schlumpf
- datenbank
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
bei *buchungen* bitte die id Spalte als gelöscht denken. Habe ich vor dem Abschicken vergessen, die buchungs_id tut hier nichts zur Sache.
CONCAT über mehrere Tabellen geht doch.
Weiss nicht, wo vorhin der Fehler war.
Danke fürs aktive Lesen.
Schlumpf
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