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 :

Reconstitution d'un Historique à partir d'une date de début


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Dev
    Inscrit en
    Août 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Reconstitution d'un Historique à partir d'une date de début
    Bonjour,

    Je me demandais quelle était la requête la plus optimale pour arriver à reconstituer un historique à partir d'une table qui ne contient qu'une date début.

    Quelqu'un aurait déjà travaillé sur le sujet ou aurait une idée ?

    Je m'explique :

    J'ai une table PROJECTHISTORY qui contient 3 colonnes

    PROJECT/PROJECTLEADER/STARTDATE

    Dans laquelle pour chaque projet je vois l'historique des responsable projets
    (c'est à dire quand un nouveau project leader a pris la responsabilité du projet)
    il peut y en avoir eu 3 à 4 successifs et par ailleurs un project leader peut avoir refilé son projet pendant une période et le récupérer plus tard dans ce cas j'ai 2 lignes pour le même project leader avec 2 date de début différentes.

    Je voudrais donc créer une requête qui me permette d'avoir pour chaque project le project leader sa date de début et sa date de fin ?

    c'est à dire qui me ramène les données suivantes :

    PROJECT/PROJECTLEADER/STARTDATE/ENDDATE

    (où ENDDATE serait vide pour le project leader en cours)

    Quelqu'un aurait-il une idée de la requête la plus simple ou optimale pour arriver à cela ?

    j'ai bien fait une requête avec plusieurs alias de table mais cela ne me semble pas terrible.

    AL

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 118
    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 118
    Points : 28 510
    Points
    28 510
    Par défaut
    Même si ta requête ne te semble pas optimale, montre-la.
    Nous pourrons alors t'aider à l'optimiser.

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    avec des fonctions analytiques sans problème
    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
     
    WITH PROJECTHISTORY AS (SELECT 1 AS PROJECT, 'a' AS PROJECTLEADER, TO_DATE('01.01.2011', 'DD.MM.RRRR') AS STARTDATE FROM dual
    UNION ALL SELECT 1 AS PROJECT, 'b' AS PROJECTLEADER, TO_DATE('15.01.2011', 'DD.MM.RRRR') AS STARTDATE FROM dual
    UNION ALL SELECT 1 AS PROJECT, 'a' AS PROJECTLEADER, TO_DATE('01.06.2011', 'DD.MM.RRRR') AS STARTDATE FROM dual
    UNION ALL SELECT 2 AS PROJECT, 'c' AS PROJECTLEADER, TO_DATE('01.10.2011', 'DD.MM.RRRR') AS STARTDATE FROM dual
    UNION ALL SELECT 3 AS PROJECT, 'c' AS PROJECTLEADER, TO_DATE('01.01.2011', 'DD.MM.RRRR') AS STARTDATE FROM dual
    UNION ALL SELECT 3 AS PROJECT, 'a' AS PROJECTLEADER, TO_DATE('01.07.2011', 'DD.MM.RRRR') AS STARTDATE FROM dual
    )
    SELECT PROJECT, projectleader, startdate, lead(startdate-1, 1)  OVER (PARTITION BY PROJECT ORDER BY startdate) AS enddate
    FROM PROJECTHISTORY
     
    PROJECT	leader	STARTDATE 	ENDDATE
    1	a	01/01/2011	14/01/2011
    1	b	15/01/2011	31/05/2011
    1	a	01/06/2011	
    2	c	01/10/2011	
    3	c	01/01/2011	30/06/2011
    3	a	01/07/2011

  4. #4
    Candidat au Club
    Homme Profil pro
    Dev
    Inscrit en
    Août 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup McM,

    j'étais plutôt partie sur une requête beaucoup plus simple pour moi du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Select 
     
    a.projectleader
    ,a.STARTDATE
    ,a.PROJECT
    ,b.STARTDATE as ENDDATE
    From
     
    PROJECTHISTORY a
     
     left outer  join PROJECTHISTORY b on (a.PROJECT=b.PROJECT and a.STARTDATE<b.STARTDATE)


    Novice en la matière je ne connaissais pas les fonctions analytiques

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tu peux aussi le faire comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.PROJECT, a.projectleader, a.startdate,
    (SELECT MIN(b.startdate)-1 FROM PROJECTHISTORY b WHERE b.PROJECT = a.PROJECT AND b.startdate > a.startdate) AS enddate
    FROM PROJECTHISTORY a

  6. #6
    Candidat au Club
    Homme Profil pro
    Dev
    Inscrit en
    Août 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette variante.

    Je vais plutôt utiliser la première proposition cela me permettra aussi de creuser sur les fonctions analytiques.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2010, 08h39
  2. Réponses: 4
    Dernier message: 07/08/2008, 18h12
  3. [vbexcel]trouver le jour a partir d'une date.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/12/2005, 17h07
  4. [D7] trouver une semaine partir d'une date
    Par raoulmania dans le forum Langage
    Réponses: 3
    Dernier message: 01/12/2005, 11h36
  5. Réponses: 3
    Dernier message: 19/04/2002, 01h11

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