Requete max date + distinct id
varfendell
Messages postés
3259
Date d'inscription
Statut
Membre
Dernière intervention
-
varfendell Messages postés 3259 Date d'inscription Statut Membre Dernière intervention -
varfendell Messages postés 3259 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila, je planche sur un problème, et je ne voit pas de solution.
Mon soucis est le suivant: j'ai une table de jointure dont trois colonnes m'intéressent: [id_commande], [id_user] et [date]
Mon but étant, pour un user dont j'ai l'id, récupérer la liste des [id_commande], mais seulement pour chaque id_commande il faut la ligne la plus récente.
(Pour le contexte, mes users travaillent sur des commandes, et à chaque évolution d'une commande, il est indiqué qui et quand).
Donc, par exemple, je souhaite sélectionner tout mes id_commandes dont le id_user est 74, j'obtiens ça:
commande_id user_id date
1698 74 2014-08-20 11:02:09
1698 74 2014-08-20 11:02:17
1690 74 2014-08-28 08:23:01
1830 74 2014-08-28 09:16:52
1787 74 2014-08-28 16:15:30
1787 74 2014-08-28 16:16:11
Hors je ne veut pas la ligne 1 ni la ligne 5 (car les lignes 2 et 6 sont plus récentes).
Ma requête est la suivante:
SELECT commande_id, `user_id`, `date`
FROM historique_commande_user
WHERE user_id = 74;
J'ai essayé avec DICTINCT(commande_id) et MAX(date) mais ça ne résoud pas mon problème :(
Quelqu'un a une idée?
Cordialement
Varfendell
--
Je me promène avec mon smourbiff poilu. Vuivui, vous avez bien compris, il a des poils.
Voila, je planche sur un problème, et je ne voit pas de solution.
Mon soucis est le suivant: j'ai une table de jointure dont trois colonnes m'intéressent: [id_commande], [id_user] et [date]
Mon but étant, pour un user dont j'ai l'id, récupérer la liste des [id_commande], mais seulement pour chaque id_commande il faut la ligne la plus récente.
(Pour le contexte, mes users travaillent sur des commandes, et à chaque évolution d'une commande, il est indiqué qui et quand).
Donc, par exemple, je souhaite sélectionner tout mes id_commandes dont le id_user est 74, j'obtiens ça:
commande_id user_id date
1698 74 2014-08-20 11:02:09
1698 74 2014-08-20 11:02:17
1690 74 2014-08-28 08:23:01
1830 74 2014-08-28 09:16:52
1787 74 2014-08-28 16:15:30
1787 74 2014-08-28 16:16:11
Hors je ne veut pas la ligne 1 ni la ligne 5 (car les lignes 2 et 6 sont plus récentes).
Ma requête est la suivante:
SELECT commande_id, `user_id`, `date`
FROM historique_commande_user
WHERE user_id = 74;
J'ai essayé avec DICTINCT(commande_id) et MAX(date) mais ça ne résoud pas mon problème :(
Quelqu'un a une idée?
Cordialement
Varfendell
--
Je me promène avec mon smourbiff poilu. Vuivui, vous avez bien compris, il a des poils.
2 réponses
-
OK j'ai compris ce que tu veux cette fois.
SELECT commande_id, `user_id`, `date`
FROM historique_commande_user
WHERE user_id = 74
GROUP BY commande_id
HAVING date = MAX(date) -
SELECT commande_id, `user_id`, `date`
FROM historique_commande_user
WHERE user_id = 74
ORDER BY date DESC
LIMIT 0,1
et voilà.-
Cette requête ne me retourne que la ligne 1787 74 2014-08-28 16:16:11 (donc juste la ligne avec la date la plus récente quelque soit la requête et non pas pour chaque requête :s ).
Hors je souhaiterais que la requête me retourne pour chaque commande la ligne la plus récente.
Merci quand même de votre attention
-