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 16/03/2011, 14h18   #1
Membre Expert
 
Avatar de jbrasselet
 
Homme Julien Brasselet
Ingénieur développement logiciels
Inscription : mars 2006
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme Julien Brasselet
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2006
Messages : 952
Points : 1 382
Points : 1 382
Envoyer un message via MSN à jbrasselet
Par défaut Requête sur des données "chainées"

Bonjour,

j'ai une table INDISPO décrite ainsi :

Code :
1
2
3
4
Id
IdApplication
DateDebut
DateFin
avec par exemple les données suivantes :
Code :
1
2
3
4
5
6
7
8
9
 
Id   IdApplication    DateDebut   DateFin
1          1            D1            D2
2          1            D2            D3
3          1            D3            D4
...
10         1            D10           D11
11         2            Dx            Dy
12         1            Dx            Dy
J'aimerais récupérer pour une application les différentes périodes d'indisponibilité.
soit
Code :
1
2
3
4
 
IdApplication    DateDebut     DateFin
       1            D1            D11
       1            Dx            Dy
Je suis sous Oracle et je ne peux pas modifier la structure de ma base de données.

Avez-vous une piste ?

Merci d'avance
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
jbrasselet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h20   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
J'imagine que vous voulez faire de la séparation par intervalles de dates, les D1 à D11 se suivent, puis il y a un trou de données, puis Dx Dy se suivent ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h24   #3
Membre Expert
 
Avatar de jbrasselet
 
Homme Julien Brasselet
Ingénieur développement logiciels
Inscription : mars 2006
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme Julien Brasselet
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2006
Messages : 952
Points : 1 382
Points : 1 382
Envoyer un message via MSN à jbrasselet
Oui c'est cela. Je veux récupérer deux intervalles. Un qui va de D1 à D11 puisqu'il y a un chainage dans les dates, et un autre de Dx à Dy (sachant qu'il pourrait y avoir un chainage également que je n'ai pas indiqué)
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
jbrasselet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 17h32   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Voici une solution :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
WITH MaTable AS
(
SELECT 1 AS id, 1 AS ida, trunc(sysdate) AS deb, trunc(sysdate) + 1 AS fin FROM dual union ALL
SELECT 2      , 1       , trunc(sysdate) + 1   , trunc(sysdate) + 2        FROM dual union ALL
SELECT 3      , 1       , trunc(sysdate) + 2   , trunc(sysdate) + 3        FROM dual union ALL
SELECT 4      , 1       , trunc(sysdate) + 3   , trunc(sysdate) + 4        FROM dual union ALL
SELECT 5      , 1       , trunc(sysdate) + 4   , trunc(sysdate) + 5        FROM dual union ALL
SELECT 6      , 1       , trunc(sysdate) + 5   , trunc(sysdate) + 6        FROM dual union ALL
SELECT 7      , 1       , trunc(sysdate) + 6   , trunc(sysdate) + 7        FROM dual union ALL
SELECT 8      , 1       , trunc(sysdate) + 7   , trunc(sysdate) + 8        FROM dual union ALL
SELECT 9      , 1       , trunc(sysdate) + 8   , trunc(sysdate) + 9        FROM dual union ALL
SELECT 10     , 1       , trunc(sysdate) + 100 , trunc(sysdate) + 101      FROM dual union ALL
SELECT 11     , 1       , trunc(sysdate) + 101 , trunc(sysdate) + 102      FROM dual union ALL
SELECT 12     , 1       , trunc(sysdate) + 102 , trunc(sysdate) + 103      FROM dual
)
  ,  sr1 AS
(
SELECT id, ida, deb, fin,
       case deb
         when lag(fin) over(partition BY ida ORDER BY id ASC)
         then NULL
         else id
       end AS dlg
  FROM MaTable
)
  ,  sr2 AS
(
SELECT id, ida, deb, fin,
       last_value(dlg IGNORE nulls) over(partition BY ida ORDER BY id ASC) AS lvl
  FROM sr1
)
  SELECT ida, min(deb) AS deb, max(fin) AS fin
    FROM sr2
GROUP BY ida, lvl
ORDER BY ida ASC, deb ASC;
 
       IDA DEB        FIN       
---------- ---------- ----------
         1 16/03/2011 25/03/2011
         1 24/06/2011 27/06/2011
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/03/2011, 08h45   #5
Membre Expert
 
Avatar de jbrasselet
 
Homme Julien Brasselet
Ingénieur développement logiciels
Inscription : mars 2006
Messages : 952
Détails du profil
Informations personnelles :
Nom : Homme Julien Brasselet
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2006
Messages : 952
Points : 1 382
Points : 1 382
Envoyer un message via MSN à jbrasselet
Merci ça marche impeccable mais j'aurais jamais trouvé ça tout seul
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
jbrasselet 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 19h04.


 
 
 
 
Partenaires

Hébergement Web