Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2011, 18h03   #1
Nouveau Membre du Club
 
Inscription : mars 2005
Messages : 54
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 54
Points : 25
Points : 25
Par défaut Selectionner une ligne avec un max sur plusieurs critères

Bonjour,

J'ai une table de ce type là :

ID PRODUIT DATE--- CLIENT
1 PRO0001 20111202 CLI01
2 PRO0001 20111202 CLI01
3 PRO0002 20111202 CLI01
4 PRO0002 20111203 CLI01
5 PRO0002 20111202 CLI02

Je souhaite récupérer l'ID maximum de la ligne par produit, par client et par Date maximum...

Sur mon exemple je souhaite donc avoir :
2 PRO0001 20111202 CLI01
4 PRO0002 20111203 CLI01
5 PRO0002 20111202 CLI02

Avez vous une idée ? Je bute pour ma part sur les 2 max ...

Merci
achestyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 18h38   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Avez vous une idée ? Je bute pour ma part sur les 2 max ...

Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT ID,PRODUIT,CLIENT,[DATE] 
FROM (
   SELECT ID,
   PRODUIT,
   CLIENT,
   [DATE],
   ROWNUMBER() OVER (PARTITION BY PRODUIT,CLIENT,[DATE] ORDER BY [DATE] DESC,ID    DESC) ROW
   FROM TABLE) T
 WHERE T.ROW=1
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 10h53   #3
Nouveau Membre du Club
 
Inscription : mars 2005
Messages : 54
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 54
Points : 25
Points : 25
Hello

Merci pour la réponse. J'ai apporté une petite correction qui a consisté à supprimer la date de la partition sinon ça ne fonctionnait pas bien.
Merci de m'avoir fait découvrir cette utilisation de Row_Number

Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT ID,PRODUIT,CLIENT,[DATE] 
FROM (
   SELECT ID,
   PRODUIT,
   CLIENT,
   [DATE],
   ROW_NUMBER() OVER (PARTITION BY PRODUIT,CLIENT ORDER BY [DATE] DESC,ID    DESC) ROW
   FROM TABLE) T
 WHERE T.ROW=1


Achestyx
achestyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h40.


 
 
 
 
Partenaires

Hébergement Web