Bonjour à tous
J'ai un problème pour faire une requête.

J'ai une table de ce style
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
J'ai besoin de récupérer l'IDCOMMANDE dont c'est la dernière date d'achat.
Je suis sur SQL Server, j'ai pensé à faire un truc du style :
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)
Manque de bol, si il y a plusieurs achats le même jour, on aura deux lignes, c'est un comportement indésirable.
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
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
Le problème c'est que ca ne peut pas marcher puisque le group by dissocie les champs.

quelqu'un a une idée ?