Hallo,
Tabelle A
Id Name
1 aa
2 bb
3 cc
> ~~~perl
Tabelle B
> Id Datum
> 1 2010-02-21 03:25:31
> 1 2010-02-22 04:25:35
> 2 2010-02-21 01:23:31
> 2 2010-02-23 04:24:31
Nun will ich eine Tabelle die mir von jeder ID in Tabelle A des neueste Datum aus Tabelle B ausgibt und dazu noch die Differenz an Tagen zu heute.
Ergebnis sollte sein:
ID Name Datum Datediff
1 aa 2010-02-22 04:25:3 3
2 bb 2010-02-23 04:24:3 2
schön. Selten beschreibt einer so schön, was er hat und was er bekommen möchte und warum.
> Meine Versuch:
> ~~~sql
SELECT A.id,DATEDIFF("2010-02-25",max(B.date)) FROM A, B
-- Warum keine wundervollen, schönen und verständlichen INNER JOINS?
> WHERE A.id = B.id
> AND B.date = (SELECT max(B.date) FROM B)
Easy. Du suchst eine korrelierte Unterabfrage.
Das kann nicht funktionieren, da max(B.date) im subquery ja nicht bei allen gleich ist.
ja eben. Korreliere sie. Die id von innen muss mit der von außen übereinstimmen.
Ergibt:
SELECT
A.id,
-- Du möchtest die Query nicht jeden Tag neu schreiben wollen
DATEDIFF([link:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_current-date@title=CURRENT_DATE(]), MAX(B1.date))
FROM
A
INNER JOIN
B AS B1 -- wir müssen zweimal auf B zugreifen, daher der Aliasname
ON
A.id = B1.id
-- Nun schränken wir die Datensätze ein
WHERE
B1.date = (
SELECT
MAX(B2.date)
FROM
B B2 -- um den inneren Zugriff vom äußeren unterscheiden zu
-- können,
WHERE
-- und wir das Maximaldatum zu jeder ID benötigen
-- Das ist die Korrelation.
B1.id = B2.id
)
Freundliche Grüße
Vinzenz