Bonjour à tous
J'ai un problème pour faire une requête.
J'ai une table de ce style
J'ai besoin de récupérer l'IDCOMMANDE dont c'est la dernière date d'achat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 IDCOMMANDE IDCLIENT DATEACHAT 1 1 12/01/2005 2 1 25/01/2005 3 1 25/01/2005 4 1 01/01/2005 5 2 01/01/2005
Je suis sur SQL Server, j'ai pensé à faire un truc du style :
Manque de bol, si il y a plusieurs achats le même jour, on aura deux lignes, c'est un comportement indésirable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT IDCLIENT, MAX(DATEACHAT) as MaxDateAchat INTO #DernieresCommandes FROM commande GROUP BY IDCLIENT SELECT * FROM table INNER JOIN #DernieresCommandes ON (table.IDCLIENT = #DernieresCommandes.IDCLIENT AND table.DATEACHAT= #DernieresCommandes.MaxDateAchat)
je veux n'avoir qu'une seule réponse par client pour des raisons métiers que je ne vais pas développer.
Intuitivement il me faudrait un truc du style
Le problème c'est que ca ne peut pas marcher puisque le group by dissocie les champs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT IDCLIENT, IDCOMMANDE, DATEACHAT FROM Commande GROUP BY IDCLIENT, IDCOMMANDE HAVING MAX(DATEACHAT) = DATEACHAT
quelqu'un a une idée ?
Partager