Trouver les derniers enregistrements dans un groupement sans LAST en MySQL

logo-mysql-110x57Mysql ne comporte pas fonction last et lorsque l’on fait un groupement, on ne peut récupérer les derniers enregistrements sur la base d’un regroupement.

 

Dans un de mes développement, j’avais les coordonnées de destinataire intégrée dans une table nommée commandes. (pour éviter une table supplémentaire dans un schéma déjà complexe)

La difficulté était de récupérer la liste des destinataires avec leurs coordonnées les plus récente. Ces dernières se trouvent dans la dernière commande passée pour chaques destinataires.

Une requête SQL telle que:

select numero_client, nom,prenom,adresse,codepostal, ville from commandes group by numero_client

ne récupère pas le dernier enregistrement.Hors si le destinataire a changé de nom ou d’adresse, cela pose problème.

On peut contourner le problème par une requête en deux temps:

select numero_client, nom,prenom,adresse,codepostal, ville from commandes where id in (select max(id) from commandes group by numero_client)

La 1ere partie de la requête select max(id) from commandes group by numero_client va établir une liste des id de la dernière commande pour chaque client.Ensuite la seconde partie de la requête va sélectionner les lignes correspondantes à la liste d’id précédemment créé.

Cela permet de contourner le problème de l’absence de l’instruction last.

 

 

 

 

 

Auteur : dominique

Je suis IT et développeur (devops) ayant pour principe que l'informatique doit toujours rester un outil au service de l'être humain et non pour l'asservir.

Laisser un commentaire