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 :

Table cumulative et delta


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut Table cumulative et delta
    Bonjour,

    J'ai un problème assez classique (je pense) mais j'arrive pas à trouver une solution élégante et performante alors je me tourne vers vous...

    Le problème est le suivant :
    • Soit une table de mesures cumulatives de la forme suivante (DateHeure Date, Mesure NUMBER)
      01/02/2009 14h12 51
      03/02/2009 07h48 70
      ...
      12/02/2009 07h02 90
    • j'aimerais avoir le calcul du delta entre chaque ligne n et n+1
    • attention : il y a un piège ; il se peut que la mesure ne soit pas tout le temps croissante, il peut y avoir des remises à zéro. Par exemple, on peut avoir la ligne
      10/02/2009 00h10 2
      Dans ce cas, il ne faut pas calculer 2-70, mais simplement laisser la valeur "2"
      ça risque donc d'être quelque chose du genre max(N+1, N+1 - N)


    Un CONNECT BY ne permettrait-il pas de répondre à mon besoin ?

    Ai-je été clair ?

    merci d'avance,

    Leo

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    case 
      when mesure>lag(mesure) over(order by dateheure) 
      then mesure-lag(mesure) over(order by dateheure) 
      else mesure 
    end
    ref: lag lead

  3. #3
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    case 
      when mesure>lag(mesure) over(order by dateheure) 
      then mesure-lag(mesure) over(order by dateheure) 
      else mesure 
    end
    ref: lag lead

    Magnifique !
    y'a pas à dire, un jour faudra que je m'y colle pour de bon à ces fameuses fonctions analytiques !

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

Discussions similaires

  1. Champ Cumul sur une table
    Par Faro dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 13/06/2007, 01h30
  2. Réponses: 10
    Dernier message: 09/03/2007, 21h14
  3. [FN] Dénormaliser une table de cumuls mensuels
    Par doudou_rennes dans le forum Schéma
    Réponses: 3
    Dernier message: 27/02/2007, 16h18
  4. cumul sur une table liée
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/11/2006, 19h45
  5. Cumul sur deux tables
    Par lper dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/11/2004, 15h02

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