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 02/03/2011, 08h42   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 42
Points : 11
Points : 11
Par défaut Valeur la plus grande

Bonjour,

Je suis quelque peu débutant et même si j'ai un peu fouillé sur le net avant, je n'ai toujours pas trouvé quelque chose correspondant à mes attentes.

J'ai une table avec les enregistrements de tous les contrats, ceux en cours comme ceux passés, avec dans un champ le num de contrat, ainsi que la version du contrat (il peut y en avoir des dizaines).

Citation:
no_contrat / version_contrat
123456 / 0
123456 / 1
123456 / 2
456789 / 0
...
Je souhaite lier cette table avec une table contenant les noms et numéros de tiers mais je voudrais seulement récupérer les dernières versions de contrat.

Citation:
Num_tiers / Nom_tiers / no_contrat
aze123 / mich / 123456
poi741 / much / 456789
J'ai essayé plusieurs requêtes avec des max, top 1 etc mais sans résultats.

Pourriez vous m'aider ?
merci d'avance
ridokou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 11h09   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour


voulez-vous juste obtenir la dernière version du contrat, ou voulez vous aussi récuperer d'autres colonnes de la table contrat, pour le dernier contrat ?

Edit : si vous le pouvez, postez une ou deux requêtes que vous avez essayez, cela nous aidera à bien comprendre ce que vous voulez au final...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 11h21   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 42
Points : 11
Points : 11
Bonjour,

je souhaite obtenir que la dernière version mais pour chaque contrat.
Dans l'exemple que je donne dans le 1er post, mon résultat aurait été :
123456 / 2
456789 / 0

1ere tentative :
Code :
1
2
3
4
5
 
SELECT cv.NO_contrat, cv.version_contrat, ct.CODE_STATUT, ct.CODE_TYPECNT
FROM CONTRAT_VAR cv
LEFT JOIN CONTRAT ct ON ct.NO_CONTRAT = cv.NO_CONTRAT
AND cv.VERSION_CONTRAT = (SELECT max(VERSION_CONTRAT) FROM CONTRAT_VAR)
mais la, ça ne me revoit qu'une seule ligne avec le contrat qui a la version la plus haute

2éme tentative :

Code :
1
2
3
4
5
6
 
SELECT A.NO_contrat, A.version_contrat, ct.CODE_STATUT, ct.CODE_TYPECNT
FROM (SELECT NO_contrat, version_contrat
		FROM CONTRAT_VAR
		GROUP BY NO_contrat, version_contrat) A
LEFT JOIN CONTRAT ct ON ct.NO_CONTRAT = A.NO_CONTRAT
mais la ça me sélection tous les contrats et toutes les versions...
ridokou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 11h45   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Dans votre premiere requete, votre sous requete renvoi le max tous contrats confondus

Dans la deuxième, votre pseudo table reprend toutes les versions, alors que vous ne voulez que la dernière

à partir votre deuxième requête, on peut faire :
Code sql :
1
2
3
4
5
6
7
8
 
SELECT A.NO_contrat, A.version_contrat, ct.CODE_STATUT, ct.CODE_TYPECNT
FROM (
	SELECT NO_contrat, MAX(version_contrat) AS VERSION_CONTRAT
	FROM CONTRAT_VAR
	GROUP BY NO_contrat
) A
LEFT JOIN CONTRAT ct ON ct.NO_CONTRAT = A.NO_CONTRAT

on pourrait aussi faire :
Code sql :
1
2
3
4
5
6
7
8
9
 
SELECT
	C.NO_CONTRAT,
	MAX(V.VERSION_CONTRAT) AS LastVersion,
	C.CODE_STATUT,
	C.CODE_TYPECNT
FROM CONTRAT C
LEFT OUTER JOIN CONTRAT_VAR V ON C.NO_CONTRAT = V.NO_CONTRAT
GROUP BY C.NO_CONTRAT,C.CODE_STATUT,C.CODE_TYPECNT
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 12h01   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 42
Points : 11
Points : 11
Merci beaucoup pour votre aide aieeeuuuuu, ça a l'air d'être parfait

Bonne journée a vous
ridokou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 12h02   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
De rien !

bonne journée également
aieeeuuuuu 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 14h56.


 
 
 
 
Partenaires

Hébergement Web