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 :

Demande d'aide sur une requête SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Septembre 2021
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2021
    Messages : 55
    Points : 42
    Points
    42
    Par défaut Demande d'aide sur une requête SQL
    Bonjour à tous,

    Je dois écrire une requête SQL pour récupérer certaines informations sur des individus et je m’avoue un peu limité dans mes connaissances.
    Dans la base de donnée, nous avons plusieurs individus identifiés par un numéro unique. Ensuite pour chacun plusieurs informations sont présentes identifiées par des codes. (exemple code SG_A1N = résultat Blond ; code SG_A2N = résultat 1m80...)

    Ma mission est de récupérer 5 résultats, dont j'ai donc les 5 codes uniques, pour chaque individu dont au moins 1 de ces résultats à été enregistré dans un certain intervalle de temps.

    Pour le moment ma requête ressemble à ça :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
      IDENTIFICATION,
      RESULTAT
    FROM
      IDENTIFICATION.TABLE,
      RESULT.TABLE
    WHERE
       CODES  IN  ( mes 5 codes )
       AND
       DATE  BETWEEN  '01/06/2020'  AND  '31/05/2021'

    Je récupère donc des résultats du genre
    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
    "ident 1","result 1"
    "ident 1","result 2"
    "ident 1","result 3"
    "ident 1","result 4"
    "ident 1","result 5"
    "ident 2","result 1"
    "ident 2","result 2"
    "ident 2","result 4"
    "ident 2","result 5"
    "ident 3","result 1"
    "ident 3","result 4"
    "ident 4","result 1"
    "ident 4","result 2"
    "ident 4","result 3"
    "ident 4","result 4"
    Comme vous le voyez mon problème est que je ne récupère pas toujours exactement 5 résultats car certains d'entre eux n'ont pas été enregistrés dans l'intervalle.

    Comment est ce que je pourrais modifier ma requête pour qu'elle récupère aussi ces résultats hors intervalle mais dont au moins 1 des 5 est bien dans l'intervalle ?


    J’espère avoir été assez clair, n'hésitez pas à me poser des questions si jamais.

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Le problème ici est que tu ne nous donnes pas la description des tables, et que les colonnes ne sont pas préfixées dans ta requête.

    Il nous faudrait aussi un jeu de test et le résultat attendu.

    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Deux problèmes majeurs dans votre requête :
    • aucun critère de jointure n'étant spécifié, vous faites le produit cartésien des deux tables en mettant en vis à vis des informations sans correspondance entre elles
    • certaines colonnes ont des noms qui sont des mots réservés SQL (ex : date), ce faisant, il faut encadrer ces noms par des doubles quotes (des crochets pour SQL server et des quotes inversées pour MySQL), sinon vous aurez une erreur de syntaxe


    Ensuite, pour vérifier qu'au moins un critère est présent dans la période recherchée, vous pouvez utiliser EXISTS

  4. #4
    Membre du Club
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Septembre 2021
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2021
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Merci de votre aide,

    Effectivement j'ai voulut simplifier la requête pour qu'elle soit plus simple à comprendre mais en réalité les attributs n'ont pas les mêmes libellés et les jointures sont présentes. J'ai accès aux données via un outil de création automatique de requêtes qui effectue seul les jointures et conversions. Mais cet outil est limité, je dois donc retoucher la requête pour qu'elle fasse ce que je veux.

    Je vous met la requête réelle ici, peut être qu'elle pourra vous aider à mieux comprendre l'organisation.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SELECT 
      IDENTIFICATION.IDNT_CODE,
      CHOICE.CHC_NAME
    FROM
      IDENTIFICATION,
      PERSON,
      RESULT,
      PROPERTY  PROPERTY_RES,
      CHOICE,
      REQUEST,
      ORDER_,
      OBJECT
    WHERE
      ( PERSON.PRSN_CORRESPONDENT=IDENTIFICATION.IDNT_TARGET(+)  )
      AND  ( RESULT.RSLT_ID(+)=REQUEST.RQST_RESULT  )
      AND  ( REQUEST.RQST_ORDER(+)=ORDER_.ORD_ID  )
      AND  ( ORDER_.ORD_OBJECT=OBJECT.OBJ_ID(+)  )
      AND  ( OBJECT.OBJ_ID=PERSON.PRSN_OBJECT(+)  )
      AND  ( PROPERTY_RES.PROP_ID(+)=RESULT.RSLT_PROPERTY  )
      AND  ( CHOICE.CHC_ID(+)=RESULT.RSLT_CHOICE  )
      AND  
      (
       PROPERTY_RES.PROP_MNEMONIC  IN  ( 'SG_A1N', 'SG_A2N', 'SG_B1N', 'SG_B2N', 'SG_C1N' )
       AND
       trunc(RESULT.RSLT_VALIDATIONTIME) - 2415022 + to_date('01011900', 'ddmmyyyy')  BETWEEN  '01/06/2020'  AND  '31/05/2021'
       )
    Le format de la date est particulier mais ça fonctionne.

    Cette requête fonctionne très bien sauf qu'elle ne renvoi pas les résultats non enregistrés dans l'intervalle.


    J’espère que ça pourra vous aider.

    Encore merci

Discussions similaires

  1. [11gR2] Demande aide sur une requête SQL
    Par Igname dans le forum SQL
    Réponses: 17
    Dernier message: 08/10/2013, 10h08
  2. demande d'aide sur une requête sql serveur
    Par PHPkoala dans le forum Développement
    Réponses: 8
    Dernier message: 30/09/2009, 15h11
  3. aide sur une requête sql
    Par sanach dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 27/02/2008, 16h43
  4. aide sur une requête sql
    Par sanach dans le forum Développement
    Réponses: 9
    Dernier message: 17/10/2007, 20h42
  5. aide sur une requête sql
    Par sanach dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/10/2007, 20h42

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