IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête de sélection de couples d'enregistrements sur une même table


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 12
    Points
    12
    Par défaut Requête de sélection de couples d'enregistrements sur une même table
    Bonjour tous,

    Mon problème est le suivant :

    Je dispose :
    * d'une table FAMILLE de structure :
    - Nom_Famille : char (25)
    - id_Famille : int

    * d'une table PERSONNE de structure :
    - Nom_Personne : char (25)
    - id_Personne : int

    * d'une table RELATION qui met en rapport les Personnes et les Familles. Sachant qu'une personne peut appartenir à plusieurs familles
    Structure :
    - id_Personne : int
    - id_Famille : int
    - Duree : int

    Le champ "Duree" indique depuis combien de temps la personne est dans la famille.

    Je voudrais formuler une requête SQL de base qui permette de retrouver, pour un couple de personnes données, tous les enregistrements de la table RELATION, où le couple donné appartient à la même famille et où la différence de "Duree" est inférieure à une valeur donnée.

    Exemple :

    Soit le couple ('PIERRE', 'JEAN') et la durée = 10

    Il faut trouver tous les couples d'enregistrements de la table RELATION pour lesquelles les personnes impliquées sont PIERRE et JEAN, appartenant à la même famille (id_Famille identique) et la différence du durée est inférieur à 5 (durée_JEAN - durée_PIERRE) < 5 ou bien (durée_PIERRE - durée_JEAN) < 5.
    En fait cela signifie qu'en valeur absolue la différence doit être inférieur à 5.

    Si réponse possible pour 2 personnes, peut-on généraliser la requête pour un n-uplet de n personnes (3, 4 ...n) ?.

    Merci des contribs.

    Tunka

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 393
    Points
    28 393
    Par défaut
    En rusant un peu, pour deux personnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT  Fam.Nom_Famille
        ,   MIN(Prs.Nom_Personne)
        ,   MAX(Prs.Nom_Personne)
    FROM
            Relation    AS Rel
        INNER JOIN
            Famille     AS Fam
            ON  Rel.Id_Famille = Fam.Id_Famille
        INNER JOIN
            Personne    AS Prs
            ON  Rel.Id_Personne = Prs.Id_Personne
    WHERE
            Prs.Nom_Personne    IN ('Pierre', 'Jean')
    GROUP BY
            Fam.Id_Famille    
    HAVING  
            MAX(Rel.Dureee) - MIN(Rel.Dureee) < 5
    ;

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/01/2011, 22h17
  2. Requête conditionnelle sur une même table
    Par grafistolage dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/02/2010, 23h49
  3. [AC-2000] obtenir plusieurs enregistrements sur une même ligne
    Par woant dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/05/2009, 17h31
  4. Réponses: 2
    Dernier message: 25/02/2009, 20h49
  5. Différence entre 1 même champ sur 2 enregistrements d'une même table
    Par manulemalin dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/02/2008, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo