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

PostgreSQL Discussion :

Equivalent LAG/LEAD de chez Oracle


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Juin 2008
    Messages : 171
    Points : 65
    Points
    65
    Par défaut Equivalent LAG/LEAD de chez Oracle
    Bonjour à tous,

    Quelqu'un peut-il me dire s'il existe une technique sous postgres équivalent aux fonctions LAG et LEAD d'Oracle, à savoir récupérer les valeurs des lignes précédentes et suivantes d'un select ?

    Merci de votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 220
    Points
    220
    Par défaut
    En fait ma réponse ne sera pas plus mal dans le forum PostgreSQL

    http://www.developpez.net/forums/sho...=584065&page=2

    Si tu ne veux pas attendre la 8.4, ce que je comprends, tu peux le simuler avec du SQL classique, mais ça risque d'être beaucoup moins performant s'il y a beaucoup de données, s'il y en a peu ça devrait aller* :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT TO_CHAR(POIN.jour,'YYYYMMDD') AS CJour,
                POIN.heure AS CHeureDeb,
                COALESCE((SELECT MIN(POIN2.heure) FROM Public.Pointage POIN2 WHERE POIN2.heure > POIN.heure), POIN.Heure) AS CHeureFin
    FROM Public.Pointage POIN;
     
    "20080715";"070000";"110000"
    "20080715";"110000";"140000"
    "20080715";"140000";"170000"
    "20080715";"170000";"170000"
    J'ai repris le contexte de l'autre thread PL/SQL, c'est à dire que Pointage ne contient les données que d'une seule journée, sinon il faut modifier "WHERE POIN2.heure > POIN.heure" pour tenir compte des jours. Idem pour l'activité : la requête ne concerne qu'une activité, comme dans l'autre thread.

    *En tout cas, un index sur la colonne "heure" aiderait certainement ici .

Discussions similaires

  1. Equivalent fonctions lead (ORACLE) pour SQL SERVER
    Par oOBaalberithOo dans le forum Développement
    Réponses: 7
    Dernier message: 06/06/2012, 11h11
  2. [SQL Server] Equivalent du if (MySQL) / decode (Oracle)
    Par Mr T dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/09/2008, 11h52
  3. Réponses: 1
    Dernier message: 29/05/2006, 19h06
  4. Formation DBA1 10G chez Oracle
    Par davy.g dans le forum Oracle
    Réponses: 4
    Dernier message: 20/04/2006, 09h19
  5. Equivalent à TRUNC ou ROUND d'Oracle sur les Dates ?
    Par swirtel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/05/2005, 09h45

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