JOIN auf neusten Datensatz

JOIN auf neusten Datensatz

am 29.11.2007 06:33:41 von Thomas Steinert

Hallo zusammen,

in Anlehnung an eine ähnl. Frage.
MySQL-Version: 4.0.24

Zwei Tabellen:

Kunden:
=======
KundenID| KundenNr
--------+----------------
1 |2007-11-02-01991
2 |2007-11-04-01992
3 |2007-11-10-01993
4 |2007-11-12-01994

Rechnungen:
===========
RechnungID|KundenID| Datum | Status
----------+--------+-------------------+--------
1 | 3 |2007-11-18 12:00:00| offen
2 | 3 |2007-11-10 10:47:51| bezahlt
3 | 1 |2007-11-02 13:23:12| bezahlt
4 | 2 |2007-11-04 09:18:37| bezahlt
5 | 2 |2007-11-12 18:00:00| offen
6 | 4 |2007-11-12 17:00:00| bezahlt


Ziel:
Nur die Kunden absteigend sortiert nach Kunden.KundenNr anzeigen, deren
LETZTE, also die neuste Rechnung den Status 'bezahlt' hat.
Für das obige Beispiel sollte also rauskommen:

KundenID| KundenNr
--------+----------------
4 |2007-11-12-01995
1 |2007-11-02-01991

Die Kunden mit den IDs 2 und 3 sollen nicht angezeigt werden, da diese
beiden Kunden zwar zwei Rechnungen haben, wovon jeweils eine Rechnung
den Status 'bezahlt' trägt, die aktuellste Rechnung dieser beiden Kunden
allerdings noch den Status 'offen' trägt.

Frage: Wie bekommt man das mit der oben genannten MySQL-Version hin?

Dank im voraus und Gruß, Thomas

Re: JOIN auf neusten Datensatz

am 29.11.2007 13:36:02 von Kris

Thomas Steinert wrote:
> Nur die Kunden absteigend sortiert nach Kunden.KundenNr anzeigen, deren
> LETZTE, also die neuste Rechnung den Status 'bezahlt' hat.
> Für das obige Beispiel sollte also rauskommen:

http://jan.kneschke.de/projects/mysql/groupwise-max

Kris

--
Kristian =?iso-8859-15?q?Köhntopp?=

Re: JOIN auf neusten Datensatz

am 29.11.2007 19:31:04 von Thomas Steinert

Kristian Köhntopp schrieb:
> http://jan.kneschke.de/projects/mysql/groupwise-max

Hilft nicht weiter, da ein
--schnipp---
SELECT k.KundenNr, r.Status, r.Datum
FROM Kunden k
LEFT JOIN Rechnungen r ON ( k.KundenID = r.KundenID )
WHERE (r.Datum)
IN
(
SELECT MAX( r.Datum )
FROM Rechnungen
WHERE r.Status = 'bezahlt'
GROUP BY r.KundenID
)
GROUP BY k.KundenNr DESC
---schnapp---

mir alle Kunden auflistet, also auch die Kunden mit den IDs 2 und 3 und
als letzte als bezahlt markierte Rechnung für
KundenId 2 ==> 2007-11-04 09:18:37
KundenID 3 ==> 2007-11-10 10:47:51
angezeigt wird.

Gruß, Thomas