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

Requêtes PostgreSQL Discussion :

Valeur incrément en fonction d'un changement de valeur [9.3]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Avatar de Atomicfryer
    Homme Profil pro
    Géomaticien
    Inscrit en
    Février 2004
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2004
    Messages : 103
    Points : 101
    Points
    101
    Par défaut Valeur incrément en fonction d'un changement de valeur
    Bonjour à tous.

    J'ai un souci de création de requête : j'ai une liste de point et j'ai une valeur dans la table qui alterne entre 0 et 2. Je cherche la valeur suivante avec un lead
    La requête est simple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
      objectid, 
      col_16,
      LEAD(col_16) OVER (ORDER BY col_01 ASC) AS next
    FROM 
      test.viab_gel_4_pt;
    et j'obtient un tableau de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    --------------------------
    objectid | col_16 | next |
    --------------------------
    2        |   2    | 2    |
    3        |   2    | 2    |
    4        |   2    | 2    |
    5        |   2    | 0    |
    6        |   0    | 0    |
    7        |   0    | 0    |
    8        |   0    | 2    |
    9        |   2    | 2    |
    10       |   2    | 2    |
    11       |   2    | 2    |
    ....
    Mon objectif et de faire un regroupement par groupe de 0 et de 2, et a chaque changement incrémenter cette valeur.
    pour au final avoir un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ---------------------------------
    objectid | col_16 | next | id_g |
    ---------------------------------
    2        |   2    | 2    |  1   |
    3        |   2    | 2    |  1   |
    4        |   2    | 2    |  1   |
    5        |   2    | 0    |  1   |
    6        |   0    | 0    |  2   |
    7        |   0    | 0    |  2   |
    8        |   0    | 2    |  2   |
    9        |   2    | 2    |  3   |
    10       |   2    | 2    |  3   |
    11       |   2    | 2    |  3   |
    ....
    Mais alors là, le bloque... Je n'arrive pas a faire de déclaration de variable pour faire une comparaison entre col_16 et next et incrémenter id_g... pour le coup je n'y arrive pas.
    Je n'ai pas bien saisi le principe. Je dois faire du transact ? ou il y a plus simple ?
    En vous remerciant
    Ne me dites pas que ce problème est difficile.
    S'il n'était pas difficile, ce ne serait pas un problème.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour

    essayez ceci :

    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
     
    WITH CTE AS (
    SELECT 
      objectid, 
      col_16,
      col_01,
      LEAD(col_16) OVER (ORDER BY col_01 ASC) AS next,
      LAG(col_16) OVER (ORDER BY col_01 ASC) AS prev
    FROM 
      test.viab_gel_4_pt
    )
    SELECT 
      objectid, 
      col_16,
      next,
      SUM(CASE WHEN prev <> col_16 THEN 1 ELSE 0 END) OVER(ORDER BY col_01 ASC) AS id_g
    FROM CTE

  3. #3
    Membre régulier
    Avatar de Atomicfryer
    Homme Profil pro
    Géomaticien
    Inscrit en
    Février 2004
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2004
    Messages : 103
    Points : 101
    Points
    101
    Par défaut
    Magnifique, je n'aurais jamais pensé à faire cela MERCI
    Ne me dites pas que ce problème est difficile.
    S'il n'était pas difficile, ce ne serait pas un problème.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/09/2009, 21h34
  2. Réponses: 9
    Dernier message: 22/03/2007, 12h14
  3. Intercepter le changement de valeur d'une variable
    Par Captain_JS dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/01/2005, 08h04
  4. Réponses: 5
    Dernier message: 25/11/2003, 10h02
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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