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

SQL Oracle Discussion :

Repérer une rupture pour déterminer les bornes d'un intervalle [10gR2]


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut Repérer une rupture pour déterminer les bornes d'un intervalle
    Bonjour,

    J'ai un table qui contient ce genre de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ID      C1	C2	C3	C4	C5
    40635	060	12	BP	1	A
    40636	060	12	BP	2	A
    40637	060	12	BP	3	A
    40638	060	12	BP	4	A
    40639	060	12	BP	5	A
    40640	060	12	BP	10	A
    40641	060	12	BP	11	A
    40642	060	12	BP	12	A
    Je voudrais pouvoir créer des intervalles sur C5. Dès que la différence entre 2 valeurs de C5 est différent de 1, la valeur précédente est définie car la borne supérieure d'un intervalle, et la valeur suivante est définie comme la valeur inférieure du prochain intervalle.
    Comme je ne suis pas sûr que cela soit claire pour tout le monde, voici ce que je voudrais obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    C1	C2	C5	C3	Borne inf	Borne sup
    060	12	A	BP		1		5
    060	12	A	BP		10		12
    Est-ce faisable en SQL ?
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    De manière étonnante, c'est assez simple.
    Votre écart vous le détectez en soustrayant votre c4 à id. Tant que les deux ensembles sont monotones, cette soustraction donne le même résultat.
    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
    with cte_matable (id, c1, c2, c3, c4, c5) as
    (
    select 40635, '060', 12, 'BP',  1, 'A' from dual union all
    select 40636, '060', 12, 'BP',  2, 'A' from dual union all
    select 40637, '060', 12, 'BP',  3, 'A' from dual union all
    select 40638, '060', 12, 'BP',  4, 'A' from dual union all
    select 40639, '060', 12, 'BP',  5, 'A' from dual union all
    select 40640, '060', 12, 'BP', 10, 'A' from dual union all
    select 40641, '060', 12, 'BP', 11, 'A' from dual union all
    select 40642, '060', 12, 'BP', 12, 'A' from dual
    )
      select c1, c2, c5, c3
           , min(c4) as c4_min
           , max(c4) as c4_max
        from cte_matable
    group by c1, c2, c5, c3, id - c4
    order by c1, c2, c5, c3, min(c4);
     
    C1  C2 C5 C3 C4_MIN C4_MAX
    --- -- -- -- ------ ------
    060 12 A  BP      1      5
    060 12 A  BP     10     12

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    Oui effectivement, c'est assez simple.
    Je n'aurais jamais pensé à ce genre de raisonnement. Je m'arrachais les cheveux en utilisant des fonctions analytiques.
    C'est parfait
    Merci beaucoup.

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

Discussions similaires

  1. Utiliser une variable pour stocker les noms d'objets.
    Par en_gel_ho dans le forum Access
    Réponses: 4
    Dernier message: 03/01/2007, 16h44
  2. utiliser une classe pour gerer les signaux
    Par TrueBeliever dans le forum Qt
    Réponses: 2
    Dernier message: 21/12/2006, 17h57
  3. Réponses: 12
    Dernier message: 25/08/2006, 13h44
  4. Réponses: 4
    Dernier message: 20/08/2006, 16h20
  5. une fonction pour enlever les doublons d'un array
    Par secteur_52 dans le forum Delphi
    Réponses: 1
    Dernier message: 27/06/2006, 13h45

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