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

PostgreSQL Discussion :

requête complexe ( ou pas ?)


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Par défaut requête complexe ( ou pas ?)
    Bonjour ,

    J'ai une table donc voici le schéma et les données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE resultat_analyse_granulo
    (
      id_resultat integer  NOT NULL, -- Identifiant du résultat
      id_ens_resultat_analyse_granulo integer , -- Identifiant de l'ensemble
      seuil_inferieur numeric, -- Seuil inférieur de la fraction
      seuil_superieur numeric, -- Seuil supérieur de la fraction
      unite_seuil text, -- Unité dans laquelle les limites de la fraction sont exprimées
      valeur numeric, -- Résultat de l'analyse granulo pour la fraction
      CONSTRAINT resultat_analyse_granulo_pk PRIMARY KEY (id_resultat )
    )
    données :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    INSERT INTO resultat_analyse_granulo VALUES (25,4,0,2,'µm',314.0) ;
    INSERT INTO resultat_analyse_granulo VALUES (26,4,2,20,'µm',105.0);
    INSERT INTO resultat_analyse_granulo VALUES (27,4,20,50,'µm',55.0);
    INSERT INTO resultat_analyse_granulo VALUES (28,4,50,100,'µm',54.0);
    INSERT INTO resultat_analyse_granulo VALUES (29,4,100,200,'µm',97.0);
    INSERT INTO resultat_analyse_granulo VALUES (30,4,200,500,'µm',237.0);
    INSERT INTO resultat_analyse_granulo VALUES (31,4,500,1000,'µm',102.0);
    INSERT INTO resultat_analyse_granulo VALUES (32,4,1000,2000,'µm',36.0);
    INSERT INTO resultat_analyse_granulo VALUES (41,6,0,2,'µm',148.0);
    INSERT INTO resultat_analyse_granulo VALUES (42,6,2,20,'µm',60.0);
    INSERT INTO resultat_analyse_granulo VALUES (43,6,20,50,'µm',28.0);
    INSERT INTO resultat_analyse_granulo VALUES (44,6,50,100,'µm',24.0);
    INSERT INTO resultat_analyse_granulo VALUES (45,6,100,200,'µm',78.0);
    INSERT INTO resultat_analyse_granulo VALUES (46,6,200,500,'µm',396.0);
    INSERT INTO resultat_analyse_granulo VALUES (47,6,500,1000,'µm',194.0);
    INSERT INTO resultat_analyse_granulo VALUES (48,6,1000,2000,'µm',72.0);
    INSERT INTO resultat_analyse_granulo VALUES (49,7,0,2,'µm',163.0);
    INSERT INTO resultat_analyse_granulo VALUES (50,7,2,20,'µm',116.0);
    INSERT INTO resultat_analyse_granulo VALUES (51,7,20,50,'µm',80.0);
    INSERT INTO resultat_analyse_granulo VALUES (52,7,50,100,'µm',72.0);
    INSERT INTO resultat_analyse_granulo VALUES (53,7,100,200,'µm',95.0);
    INSERT INTO resultat_analyse_granulo VALUES (54,7,200,500,'µm',225.0);
    INSERT INTO resultat_analyse_granulo VALUES (55,7,500,1000,'µm',131.0);
    INSERT INTO resultat_analyse_granulo VALUES (56,7,1000,2000,'µm',118.0);
    INSERT INTO resultat_analyse_granulo VALUES (57,8,0,2,'µm',362.0);
    INSERT INTO resultat_analyse_granulo VALUES (58,8,2,20,'µm',118.0);
    INSERT INTO resultat_analyse_granulo VALUES (59,8,20,50,'µm',82.0);
    INSERT INTO resultat_analyse_granulo VALUES (60,8,50,100,'µm',62.0);
    INSERT INTO resultat_analyse_granulo VALUES (61,8,100,200,'µm',78.0);
    INSERT INTO resultat_analyse_granulo VALUES (62,8,200,500,'µm',162.0);
    INSERT INTO resultat_analyse_granulo VALUES (63,8,500,1000,'µm',73.0);
    INSERT INTO resultat_analyse_granulo VALUES (64,8,1000,2000,'µm',63.0);
    INSERT INTO resultat_analyse_granulo VALUES (65,9,0,2,'µm',344.0);
    INSERT INTO resultat_analyse_granulo VALUES (66,9,2,20,'µm',178.0);
    INSERT INTO resultat_analyse_granulo VALUES (67,9,20,50,'µm',75.0);
    INSERT INTO resultat_analyse_granulo VALUES (68,9,50,200,'µm',160.0);
    INSERT INTO resultat_analyse_granulo VALUES (69,9,210,2000,'µm',243.0) ;
    Je dois vérifier que pour la même valeur du champ id_ens_resultat_analyse_granulo , les champs seuil_inferieur et seuil_superieur sont contigus

    Exemple :
    pour id_ens_resultat_analyse_granulo = 4 , on a :
    0,2
    2,20
    20,50
    50,100,
    100,200
    200,500
    500,1000
    1000,2000 .
    ( on a bien :0<2=2<20=20<50=50<100=100<200=200<500=500<1000=1000<2000 )

    En revanche pour id_ens_resultat_analyse_granulo = 9 , on passe de 200 à 210 et c'est une anomalie que je dois afficher ( je voudrais afficher uniquement id_ens_resultat_analyse_granulo , cela me suffit ).

    Je sèche sur le code. (je suis en 8.3)

    Merci d'avance pour les courageux !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    une piste, quelqu'un pourra peut-être trouver mieux.

    Le problème c'est qu'en 8.3 on a pas accès aux fonctions de fenetrage donc tout se complique ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select a.id_ens
    from (
    	select id_ens, count(*) as cnt_gene
    	from resultat_analyse_granulo
    	group by id_ens) a
    left outer join (
    	select a.id_ens, count(*) as cnt_contigu
    	from resultat_analyse_granulo a
    	inner join resultat_analyse_granulo b on a.id_ens = b.id_ens and a.seuil_sup = b.seuil_inf and a.id <> b.id
    	group by a.id_ens) b on a.id_ens = b.id_ens and a.cnt_gene - 1 = b.cnt_contigu
    WHERE b.id_ens IS NULL

    En gros on compte le nombre de ligne, par ensemble, qui ont une seuil sup et inf identique, et ensuite on compare ce résultat au nombre de lignes (-1) de l'ensemble.


    Pour le problème, une même ligne ne peut avoir un seuil inf > au seuil sup, ca devrait être checké à l'insertion.

    Sinon adaptez la requête cela est assez simple.

Discussions similaires

  1. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 14h12
  2. Requête complexe
    Par Yali dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2005, 09h19
  3. 3 tables avec requête complexe
    Par yamino dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/03/2004, 19h50
  4. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  5. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50

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