Qui n'a pas eu le besoin un jour de ressortir un listing contenant le détail de toutes les dernières commandes de ses clients ?
Jusque là ... il fallait souvent passer par des sous SELECT, un MAX et une vitesse de calcul pas souvent au rendez-vous ...
Du genre :
SELECT c.id, c.nom, f.id, f.date, f.total
FROM (clients c INNER JOIN factures f ON c.id = f.id)
INNER JOIN
(SELECT MAX(date) AS date_derniere_facture, id
FROM factures
GROUP BY id) AS mf ON mf.date_derniere_facture = f.date AND mf.id = c.id
Si vous êtes un utilisateur de PostgreSQL, vous pouvez vous simplifier la vie en utilisant la fonction DISTINCT ON, de la façon suivante :
SELECT DISTINCT ON (c.id) c.id, c.nom, f.id, f.date, f.total FROM clients c LEFT JOIN factures f ON c.id = f.id ORDER BY c.id, f.date DESC, f.id DESC;
Et le tour est joué, dans un temps record.
Bonjour, Je suis Hervé Piedvache. Footcow est mon pseudo. Passionné d'informatique, Linux, base de données PostgreSQL, développement de logiciels, Emailing et d'Internet en général.
footcow retweets what pgcon says