Maison >base de données >tutoriel mysql >Comment trouver la position et l'identifiant les plus récents pour chaque titre dans une base de données ?
Problème :
Récupérer la dernière position et son ID correspondant pour chaque titre dans une table contenant plusieurs postes avec la même sécurité.
Données Tableau :
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 |
18084 | KERX | 2013-02-20 |
18249 | KERX | 0000-00-00 |
Solution :
Utilisation d'un LEFT JOIN et d'un filtrage NULL :
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;
Dans cette requête, nous utilisons un LEFT JOIN pour fusionner la table des positions avec elle-même, en faisant correspondre les lignes par sécurité. La condition p1.buy_date < p2.buy_date garantit que p2 représente une position plus récente pour le même titre.
La clause WHERE filtre ensuite toutes les lignes où existe une position plus récente, nous laissant uniquement la dernière position pour chaque titre.
Résultats :
id | security | buy_date |
---|---|---|
27 | PCS | 2013-01-19 |
31 | RDN | 2012-09-19 |
34 | HK | 2013-01-19 |
36 | SGI | 2013-02-16 |
18084 | KERX | 2013-02-20 |
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!