Groupwise Maximum
Problème :
Obtenir la dernière position pour chaque titre à partir des éléments suivants table :
id | security | buy_date |
---|---|---|
26 | PCS | 2012-02-08 |
27 | PCS | 2013-01-19 |
28 | RDN | 2012-04-17 |
29 | RDN | 2012-05-19 |
30 | RDN | 2012-08-18 |
31 | RDN | 2012-09-19 |
32 | HK | 2012-09-25 |
33 | HK | 2012-11-13 |
34 | HK | 2013-01-19 |
35 | SGI | 2013-01-17 |
36 | SGI | 2013-02-16 |
KERX | 2013-02-20 | |
KERX | 0000-00-00 |
Solution :
La requête suivante récupère la date d'achat maximale pour chaque titre, ainsi que l'ID correspondant :
SELECT p1.id, p1.security, p1.buy_date FROM positions p1 left join positions p2 on p1.security = p2.security and p1.buy_date < p2.buy_date where p2.id is null;
Cette requête trouve efficacement la dernière position pour chaque titre à l'aide d'une jointure gauche. Il compare les dates d'achat de chaque titre et sélectionne uniquement les lignes pour lesquelles aucune date d'achat ultérieure n'existe. Cette solution optimisée garantit des résultats précis dans un temps d'exécution plus rapide par rapport aux approches basées sur des sous-requêtes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!