Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2011, 12h41   #1
Invité de passage
 
Homme Ludovic
Dev
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : août 2011
Messages : 3
Points : 2
Points : 2
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
AL_RENA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 13h05   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 535
Points : 7 535
Même si ta requête ne te semble pas optimale, montre-la.
Nous pourrons alors t'aider à l'optimiser.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 13h19   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
avec des fonctions analytiques sans problème
Code :
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
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/08/2011, 14h17   #4
Invité de passage
 
Homme Ludovic
Dev
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : août 2011
Messages : 3
Points : 2
Points : 2
Merci beaucoup McM,

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

Code :
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
AL_RENA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 14h57   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
Tu peux aussi le faire comme ceci.
Code :
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
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/08/2011, 17h36   #6
Invité de passage
 
Homme Ludovic
Dev
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : août 2011
Messages : 3
Points : 2
Points : 2
Merci pour cette variante.

Je vais plutôt utiliser la première proposition cela me permettra aussi de creuser sur les fonctions analytiques.
AL_RENA est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h26.


 
 
 
 
Partenaires

Hébergement Web