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 :

cette requète me pose problème


Sujet :

Langage SQL

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut cette requète me pose problème
    Bonjour,

    J'ai le pb suivant avec une table qui représente des couches de niveaux définies par une altitude min et max :
    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
    SQL> select * from   hold_spe;
     
    MIN_ALTITUDE MAX_ALTITUDE MIN_CAS_SPEED MAX_CAS_SPEED
    ------------ ------------ ------------- -------------
               0         6000           210           229
            6001        14000           240           270
           14001        24000           294           344
     
    SQL> desc hold_spe
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     MIN_ALTITUDE                              NOT NULL NUMBER(38)
     MAX_ALTITUDE                              NOT NULL NUMBER(38)
     MIN_CAS_SPEED                             NOT NULL NUMBER(38)
     MAX_CAS_SPEED                             NOT NULL NUMBER(38)
     
    SQL>
    Je dois faire une requete afin de trouver si il y a des trous dans les altitudes : ici il n'y en a pas, on a une suite continue 0 - 6000-6001-14000-14001-24000
    Mais avec l'exemple suivant je devrais trouver une (ou deux) instances: ligne 6000 et/ou 6003
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MIN_ALTITUDE MAX_ALTITUDE MIN_CAS_SPEED MAX_CAS_SPEED
    ------------ ------------ ------------- -------------
               0         6000           210           229
            6003        14000           240           270
           14001        24000           294           344
    Si cela inspire quelqu'un !
    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 877
    Points : 53 055
    Points
    53 055
    Billets dans le blog
    6
    Par défaut
    jeu d'essais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE T (MIN_ALTITUDE INT, MAX_ALTITUDE INT, MIN_CAS_SPEED INT, MAX_CAS_SPEED INT)
     
    INSERT INTO T VALUES (0, 6000, 210, 229)
    INSERT INTO T VALUES (6003, 14000, 240, 270)
    INSERT INTO T VALUES (14001, 24000, 294, 344)
    -- requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM   (SELECT MIN_ALTITUDE, MAX_ALTITUDE, 
                   (SELECT MIN(MIN_ALTITUDE) AS MINA
                    FROM   T AS T2
                    WHERE  T2.MIN_ALTITUDE > (T1.MAX_ALTITUDE + 1)) AS TROU
            FROM   T AS T1) AS TT
    WHERE  TROU IS NOT NULL
    -- solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MIN_ALTITUDE MAX_ALTITUDE TROU
    ------------ ------------ -----------
    0            6000         6003
    Airbus ?

    A +

  3. #3
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    C'est génial.
    Je n'ai pas l'habitude de récupérer le résultat de sous requètes dans un alias (... as trou ...), ce qui ajoute en effet des possibilités.
    Merci

    Pas airbus, mais Eurocontrol.

  4. #4
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Après test, la requete ne marche pas lorsqu'aucune erreur n'est attendu : 14001 est retourné systématiquement.
    A+

  5. #5
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Cette requete semble fonctionner dans tous les cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from (select min(a.max_altitude) b,min(b.min_altitude) c
    from hold_spe a,hold_spe b
    where a.max_altitude < b.min_altitude and a.max_altitude!=b.min_altitude+1 group by a.min_altitude,a.max_altitude)
    where b+1 != c;
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Requête avec sous requête qui pose problème
    Par redoran dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 13/04/2014, 16h46
  2. Requête qui pose problème
    Par MarvinR18 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 29/12/2011, 14h00
  3. Requête qui pose problème
    Par Tifany.Pitel dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 11/11/2011, 16h47
  4. Une requête qui pose problème
    Par supertoms dans le forum Langage SQL
    Réponses: 7
    Dernier message: 20/04/2008, 18h25
  5. Requête SQL qui me pose problème
    Par CB56 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/02/2007, 16h07

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