[Résolu] Requête sur deux tables liées avec relation (1-n)

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
YoF
Fraîchement OOthentifié
Messages : 8
Inscription : 14 juin 2011 09:52

[Résolu] Requête sur deux tables liées avec relation (1-n)

Message par YoF »

Bonjour,

J'ai un problème qui me parait simple mais sur lequel je butte bêtement (je n'ai pas trouvé de solution sur le forum).

J'ai une base (jointe au message) avec deux tables liées entre elles par une relation de type 1-n.
* La première table (jeunes) contient l'identité d'individus (Nom, Prenom, Sexe, clef d'index).
* La seconde table contient le parcours scolaire de chaque individu (nom de l'établissement, date d'arrivée, date de sortie, commentaires...).

Juste que là, c'est assez simple.

Mon objectif est de faire une requête dont l'objectif est de donner pour chaque individu le dernier établissement (en fonction de la date d'arrivée) mais ma tentative me sort tous les établissement pour tous les individus (et du coup, dans ma requete "requete_jeunes2"), j'ai autant de fois chaque individu qu'il y a d'établissement associés.

Comment n'extraire que le dernier établissement de chaque individu?

Par avance merci,

YoF
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par YoF le 17 juin 2011 08:30, modifié 1 fois.
OpenOffice 3.2 sous Windows XP SP3
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17219
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Requete sur deux tables liées avec relation (1-n)

Message par jeanmimi »

Bonjour,
Comment n'extraire que le dernier établissement de chaque individu ?
Un filtre sur la date d'arrivée dans la requête ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
YoF
Fraîchement OOthentifié
Messages : 8
Inscription : 14 juin 2011 09:52

Re: Requete sur deux tables liées avec relation (1-n)

Message par YoF »

Cette solution ne marche que si pour toutes les personnes, le dernier établissement est associé à la même date.
Or ce n'est pas le cas toujours le cas.

Dans l'exemple ici, certains étaient en établissement jusqu'en 2009 et d'autres jusqu'en 2010.

Si on filtre sur 2009, on obtient uniquement le nom de l'établissement des individus pour 2009 ce qui n'est pas forcément le dernier établissement fréquenté... (comme sur ta capture).

Si on filtre sur 2010, on obtient uniquement les individus scolarisés en 2010 (et on "loupe" ceux qui n'étaient plus scolarisés en 2010).

Merci tout de même!
OpenOffice 3.2 sous Windows XP SP3
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: Requete sur deux tables liées avec relation (1-n)

Message par spYre »

Bonjour YoF,

Cela est possible en utilisant une requête intermédiaire renvoyant la date la plus récente pour chaque élève :

Code : Tout sélectionner

SELECT MAX( "Parcours"."Arrivée" ) AS "Dernière arrivée", "Jeunes"."ID" AS "JID"
FROM "Parcours", "Jeunes"
WHERE "Parcours"."Ref_jeune" = "Jeunes"."ID"
GROUP BY "Jeunes"."ID"
Et pour supprimer la requête intermédiaire (plus intuitif en mode sql qu'en mode ébauche) :

Code : Tout sélectionner

SELECT "Jeunes"."Nom", "Jeunes"."Prenom", "P1"."Etablissement", "P1"."Arrivée"
FROM "Parcours" AS "P1", "Jeunes"
WHERE "P1"."Ref_jeune" = "Jeunes"."ID" AND "P1"."Arrivée" = ( SELECT MAX( "P2"."Arrivée" ) FROM "Parcours" AS "P2" WHERE "P2"."Ref_jeune" = "Jeunes"."ID" GROUP BY "Jeunes"."ID" )
ORDER BY "Jeunes"."Nom" ASC, "Jeunes"."Prenom" ASC
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
YoF
Fraîchement OOthentifié
Messages : 8
Inscription : 14 juin 2011 09:52

Re: Requete sur deux tables liées avec relation (1-n)

Message par YoF »

Ça alors!!!

Ça a l'air de marcher (je vais vérifier ça ce soir ou demain avant d'indiquer [RESOLU])... :D

En revanche, je n'ai pas tout compris :oops: (mais je pense que c'est parce que je ne maitrise pas encore les fonctions comme MAX, GROUPE...).

En tout cas, la réponse ne semblait pas aussi simple! Merci pour ta solution!!!

YoF
OpenOffice 3.2 sous Windows XP SP3