Toute la puissance de DISTINCT ON avec PostgreSQL
Par admin le lundi 17 décembre 2007, 00:33 - PostgreSQL - Lien permanent
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.