Bonsoir @TPierre
Date la plus grande => fonction d’agrégat MAX sur la base d’un regroupement GROUP BY qui reste à définir : la date est la plus grande par rapport à quel critère : la représentation, c’est à dire la dernière représentation dans laquelle apparaît une personne ou bien par rapport à un rôle…
J’ajoute une sous-requête pour identifier les enregistrements de la table LIEN_ROLE qui correspondent à la demande.
J’ai modifié le type de variable “REPRESENTATION”.“DATE” pour DATE, afin de permettre une relation d’infériorité avec “LIEN_ROLE”.“DATE” qui est une DATE. ATTENTION, la modification du type n’est pas automatique car le champ DATE contient des valeurs qui ne sont pas des dates mais du texte. J’ai donc recopié la table dans Calc, pour me souvenir des valeurs de DATE pour chaque REPRESENTATION et j’ai ensuite recopié les valeurs une à une dans la table de la base.
Je tente une requête, basée sur ma compréhension de la date max:
SELECT "REPRESENTATION"."DATE"
, "REPRESENTATION"."LIEU"
, "PERSONNES"."NOM"
, "PERSONNES"."PRENOM"
, "ROLES"."ROLES"
FROM (SELECT MAX("LIEN_ROLE"."ID_LIEN_ROLE") AS "ID_LIEN_ROLE", MAX("LIEN_ROLE"."DATE") AS "DATEMAX"
FROM "LIEN_ROLE"
GROUP BY "LIEN_ROLE"."ID_PERSONNES") AS "TDATEMAX"
INNER JOIN "LIEN_ROLE" ON "TDATEMAX"."ID_LIEN_ROLE" = "LIEN_ROLE"."ID_LIEN_ROLE"
INNER JOIN "ROLES" ON "LIEN_ROLE"."ID_ROLES" = "ROLES"."ID_ROLE"
INNER JOIN "PERSONNES" ON "LIEN_ROLE"."ID_PERSONNES" = "PERSONNES"."ID_NOM"
INNER JOIN "LIEN" ON "LIEN_ROLE"."ID_PERSONNES" = "LIEN"."ID_PERSONNE"
INNER JOIN "REPRESENTATION" ON "LIEN"."ID_REPRESENTATION" = "REPRESENTATION"."ID_REPRESENTATION"
WHERE "LIEN_ROLE"."DATE" < "REPRESENTATION"."DATE"
Il aurait été plus ergonomique d’uniformiser les dénominations des champs : deux champs qui portent la même information devraient porter le même nom. Eviter par exemple une fois ID_ROLE et ailleurs ID_ROLES. Uniformiser de même le singulier ou le pluriel pour le nom des tables.
Je préfère expliciter les liaisons INNER ou LEFT OUTER mais INNER JOIN est équivalent à votre notation.
Vous pouvez modifier le GROUP BY en choisissant un autre champ : vous obtiendrez un autre résultat. Attention SQL est très puissant mais, comme souvent en informatique, ne vous donne que ce que vous lui avez demandé!
Ci-joint la base de données amendée avec la nouvelle requête: Lien_roles.odb
Pour montrer à la communauté que la question a trouvé sa réponse, cliquez sur ✓ à côté de la “bonne” réponse, et “votez” en cliquant sur la flèche ^ de toute réponse utile. Ce sont les mécanismes utilisés pour communiquer la qualité des questions et réponses sur ce site. Merci!
Merci d’éditer votre question (bouton éditez
, en bas de votre question ou simplement ajouter un commentaire
à ma réponse. N’utilisez pas une réponse.
Cordialement, Michel