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 :

Recopie date de début


Sujet :

SQL Oracle

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 252
    Points
    252
    Par défaut Recopie date de début
    Bonjour à tous,

    J'ai un problème que j'arrive pas à résoudre. J'ai 4 champs : date de début, date de début initiale,date de fin et flag.
    Date de début initiale est non nulle que dans les cas où mon flag est égal à 0. Pour les occurrences nulles, je voudrais qu'elles prennent la valeur de la dernière valeur non nulle.

    Ce qu'il faudrait c'est utiliser la fonction lag, mais avec un offset qui varierait pour ramener la dernière valeur non nulle.

    Merci pour votre aide.


    Nom : Sans titre.jpg
Affichages : 174
Taille : 72,0 Ko

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur en études décisionnelles
    Inscrit en
    Février 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en études décisionnelles

    Informations forums :
    Inscription : Février 2013
    Messages : 134
    Points : 351
    Points
    351
    Par défaut
    Bonjour,

    Quel est votre SGBD ?

    Comme vous parlez de la fonction LAG, voici malgré tout un exemple avec Oracle :

    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 TMP AS (
      SELECT TO_DATE(20151115, 'YYYYMMDD') DATE_DEBUT, TO_DATE(20151117, 'YYYYMMDD') DATE_FIN, TO_DATE(20151115, 'YYYYMMDD') DATE_INIT, 0 FLAG FROM DUAL
      UNION ALL
      SELECT TO_DATE(20151118, 'YYYYMMDD') DATE_DEBUT, TO_DATE(20151124, 'YYYYMMDD') DATE_FIN, NULL DATE_INIT, 1 FLAG FROM DUAL
      UNION ALL
      SELECT TO_DATE(20151125, 'YYYYMMDD') DATE_DEBUT, TO_DATE(20151206, 'YYYYMMDD') DATE_FIN, NULL DATE_INIT, 1 FLAG FROM DUAL
      UNION ALL
      SELECT TO_DATE(20160101, 'YYYYMMDD') DATE_DEBUT, TO_DATE(20160108, 'YYYYMMDD') DATE_FIN, TO_DATE(20160101, 'YYYYMMDD') DATE_INIT, 0 FLAG FROM DUAL
      UNION ALL
      SELECT TO_DATE(20160109, 'YYYYMMDD') DATE_DEBUT, TO_DATE(20160119, 'YYYYMMDD') DATE_FIN, NULL DATE_INIT, 1 FLAG FROM DUAL
    )
    SELECT 
            DATE_DEBUT
          , DATE_FIN
          , LAST_VALUE(DATE_INIT IGNORE NULLS) OVER (ORDER BY DATE_DEBUT) DATE_INIT
          , FLAG
    FROM TMP
    Cela nécessite une valeur non nulle pour la première ligne retournée par l'order by.
    N'oubliez pas la cause PARTITION BY si besoin.

    Bonne journée.

    Emmanuel

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    Oui effectivement, c'est sur Oracle. Et ça marche avec last_value. Merci bien!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/09/2007, 09h37
  2. Réponses: 1
    Dernier message: 03/07/2007, 06h43
  3. Réponses: 5
    Dernier message: 02/07/2007, 17h04
  4. Réponses: 1
    Dernier message: 18/08/2006, 10h01
  5. Comment obtenir la date de début d'une semaine ?
    Par Vodkha dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2005, 09h54

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