Select tordu

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Select tordu

par Cham » 12 déc. 2005, 09:57

Bonjour,

Le même contrat peut effectivement être affecté à plusieurs utilisateurs, d'ou le besoin de la date pour le diférencier.

C'est exactement ce que je voulais, la requête fonctionne bien, je ne savais pas que l'on peut utiliser un Group By sur un seul champ.

Merci beaucoup et bonne journée,

Sylvie

par Augure » 10 déc. 2005, 19:34

Oui cela fonctionne , avec cette petite correction:

Code : Tout sélectionner

SELECT u.numUtil, nom, prenom, DateDebContrat, DateFinContrat FROM utilisateur u INNER JOIN utilisateurContrat uc ON u.numUtil = uc.numUtil GROUP BY u.numUtil HAVING DateDebContrat=MAX(DateDebContrat)

par ouckileou » 09 déc. 2005, 19:30

Salut,

tu dois pouvoir utiliser MAX() sur une date, donc tu peux peut-être essayer qqchose comme ça (sans garantie car je ne peux pas trop tester...)

Code : Tout sélectionner

SELECT u.numUtil, nom, prenom, DateDebContrat, DateFinContrat FROM utilisateur u INNER JOIN utilisateurContrat uc ON u.numUtil = uc.numUtil GROUP BY u.numUtil HAVING MAX(DateDebContrat)

Re: Select tordu

par pjl » 09 déc. 2005, 19:25

une table de relation UtilisateurContrat (NumUtil, NumContrat, DateDebContrat, DateFinContrat)
Un contrat peut avoir plusieurs utilisateurs ?
POurquoi date-début et date_fin ne sont pas dans la table contrat ?
Un contrat peut avoir plusieurs date de début et de fin ?
Dans la table UtilisateurContrat, les 4 champs forment une clé unique. Je ne veux pas ajouter un identifiant unique pour cette table, cela ne m'apporterai rien.
Vu la structure actuelle de la table, seul les 2ers champs doivent former la clef unique.

Select tordu

par Cham » 09 déc. 2005, 19:07

Bonjour,

J'ai une table Utilisateur (NumUtil, Nom, Prenom) et une table de relation UtilisateurContrat (NumUtil, NumContrat, DateDebContrat, DateFinContrat).

NumContrat est une référence vers une autre table, Contrat.

Dans la table UtilisateurContrat, les 4 champs forment une clé unique. Je ne veux pas ajouter un identifiant unique pour cette table, cela ne m'apporterai rien.

Un utilisateur peut avoir plusieurs contrats.

Je souhaite savoir si il est possible en une seule requête d'afficher la liste des utilisateurs et de leur dernier contrat, en me basant sur le champ DateDebContrat, et sans doublon.

Ex:
Table Utilisateur
1 Dupond René
2 Durand Paul
3 Dupont Pierre

Table UtilisateurContrat
1 4 2000-01-01 2000-12-31
1 9 2001-01-01 2001-12-31
1 5 2002-01-01 2002-12-31 <== Enrgt à récupérer pour Util 1
2 1 2001-01-01 2001-12-31
2 4 2002-01-01 2002-12-31
2 2 2003-01-01 2003-12-31 <== Enrgt à récupérer pour Util 2
Résultat souhaité:
1 Dupond René 5 2002-01-01 2002-12-31
2 Durand Paul 2 2003-01-01 2003-12-31
Mon problème est que je n'arrive pas à récupérer juste une ligne de la table UtilisateurContrat, je ne peux pas utiliser la fonction Max car le numéro de contrat n'est pas ordonné.
Je souhaite récupérer de la table UtilisateurContrat l'enregistrement dont le champ DateDebContrat est le plus récent.
Et j'ai besoin de tous les champs de la table Utilisateur et tous les champs de la table UtilisateurContrat.

Merci pour votre aide,

Sylvie