Bonjour à tous,
Je viens chercher de l'aide car j'en finis par me demander si ce que je veux faire est réellement possible. Je m'explique par l'exemple :
Soit une table A contenant par exemple des utilisateurs, ayant pour champs id et nom.
Soit une table B contenant des visites avec un id, un id d'utilisateur et une date (on compte plusieurs visites par utilisateur).
J'aimerais faire une requete qui me sorte tous les utilisateurs avec leur date de dernière visite.
Donc, j'ai commencé par chercher un moyen de ce style :
Je n'ai trouvé aucune syntaxe qui fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT A.id, A.nom, B.date FROM A JOIN B USING B.user_id = A.id WHERE B.date = MAX(B.date)
J'ai essayé de faire la requête sur B avec des "GROUP BY user_id", impossible de savoir s'il va me sortir la première ou dernière date (le group by venant avant le order by).
Si je devais sortir une seule ligne, avec un identifiant précis, 1 par exemple :
Ca me sortirai donc pour l'id 1, l'id, le nom et la date de dernière visite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT A.id, A.nom, B.date FROM A JOIN B USING B.user_id = A.id WHERE B.date IN (SELECT MAX(date) FROM B WHERE user_id = 1) AND A.id = 1
Mais sur une requête pour l'ensemble des utilisateurs, j'ai beau cherché dans tous les sens depuis des heures, je ne trouve pas...
Bon, j'ai simplifié au max afin de ne mettre en avant que ce problème, si quelqu'un sait m'aider, il aura ma gratitude infinie (deux fois même).
D'avance merci,
Ben
Partager