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 :

Test sur résultat d'une requête


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Test sur résultat d'une requête
    Bonjour à tous,

    Je suis à la recherche de la technique me permettant de pouvoir, à partir de plusieurs lignes sorties d'un première requête, de pouvoir comparer une ligne à la ligne précédente.



    Un exemple valant toujours mieux, j'ai 10 lignes de cette forme

    1
    2
    1
    1
    1
    1
    2
    1
    1
    2

    je veux connaître le nombre de "1" précédés d'un "2".
    ici, le résultat devrait être 2

    Je n'ai vraiment aucune piste "simple" pour faire cela.

    Je travaille sous Oracle.
    J'espère avoir été assez clair dans ma demande mais si vous voulez des détails, n'hésitez pas.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 104
    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 104
    Points : 28 395
    Points
    28 395
    Par défaut
    Sachant que, par définition, les lignes d'une table ne sont pas ordonnées, il manque certainement des éléments dans ce que tu présentes...

    Quelle est la structure réelle de ta table (limitée aux colonnes utiles) ? La condition de tri des lignes ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    mes lignes sont ordonnées dans un premier temps par une première requête.

    Mes lignes contiennent un Identifiant unique et incrémental qui me sert à les trier justement.

    Dans ma première requête, elles sont ordonnées selon cette colonne.

    Le résultat peut donc se résumer en

    ID, CHAMPS_TEST
    1,1
    4,2
    17,1
    28,1
    35,1
    46,1
    54,2
    78,1
    95,1
    98,2

    mais dans cette première requête je ne sélectionne que les lignees ayant un champs_test valant 1 ou 2. Du coup, les numéros d'identifiants ne se suivent pas.

  4. #4
    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
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    regardez du côté des fonctions lead / lag.
    Elle permettent de connaitre la valeur de la ligne d'avant / après dans le select.


    Couplez ceci avec un sum(case when lead/lag(ma_col) = 1 and ma_col = 2 then 1 else 0 end)

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Il faut passer par une sous-requête, mais la solution analytique est correcte :
    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
    With MaTable as
    (
    select  1 as id, 1 as champs_test from dual union all
    select  4      , 2                from dual union all
    select 17      , 1                from dual union all
    select 28      , 1                from dual union all
    select 35      , 1                from dual union all
    select 46      , 1                from dual union all
    select 54      , 2                from dual union all
    select 78      , 1                from dual union all
    select 95      , 1                from dual union all
    select 98      , 2                from dual
    )
      ,  SR as
    (
    select Id, champs_test
         , lag(champs_test) over(order by id asc) as champs_test_prev
      from MaTable
    )
    select count(case when champs_test = 1 and champs_test_prev = 2 then 1 end) as nb
      from SR;
     
    NB
    --
     2

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    j'avais bien compris qu'il me fallait une sous requête mais je ne connaissais pas les fonctions analytiques lag/lead à utiliser après.

    C'est tout à fait ça qu'il me fallait et ça fonctionne parfaitement.

    Merci beaucoup pour votre aide

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

Discussions similaires

  1. [Vxi3] Invite Dans Liste sur résultat d'une requète
    Par tpeluchon dans le forum Deski
    Réponses: 2
    Dernier message: 01/02/2010, 12h45
  2. Test de résultat d'une requête
    Par Tintou dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/05/2007, 15h45
  3. [MySQL] implode() sur résultat d'une requête
    Par popogendarme dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/02/2007, 15h28
  4. [MySQL] Affichage des résultats d'une requête sur plusieurs pages
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/10/2006, 13h24
  5. [SQL] Afficher les résultats d'une requête sur plusieurs pages
    Par mealtone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/09/2006, 13h20

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