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 :

Problème SQL ajout d'intervalle


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Problème SQL ajout d'intervalle
    Bonjour à tous,

    Je vous expose mon problème :

    J'ai deux tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Place :
      dt_db              dt_fin           nb_place
    01/09/1980        31|12|2030           1
     
    places_utilisées :
      dt_db              dt_fin           nb_place
    01/01/2009        24/06/2014            1
    25/08/2014        30/04/2015            1
    01/05/2015        31/12/2030            1

    Je souhaiterais alimenter une table à partir des tables place et disponibilité , de façon à obtenir le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    place_disponible :
      dt_db              dt_fin           nb_place
    01/09/1980         31/12/2008          1
    01/01/2009         24/06/2014          0
    25/06/2014         24/08/2014          1
    25/08/2014         30/04/2015          0
    01/05/2015         31/12/2030          0
    Je vous remercie pour votre aide

  2. #2
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Pour moi si on veut faire ça avec SQL
    alors il faut utiliser PL SQL
    =>
    je cite "... Il permet de combiner des requêtes SQL et des instructions procédurales (boucles, conditions...), dans le but de créer des traitements complexes ... "
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Voici un point de départ, à compléter éventuellement pour prendre en compte des cas spécifiques non mentionnés s'ils sont possibles (chevauchement de plages, ...)

    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
    19
    20
    21
     
    WITH AllDates AS (
    	SELECT 	dt_db as dt FROM Place
    	UNION ALL SELECT dt_fin FROM Place
    	UNION ALL SELECT dt_db as dt FROM Place_utilisees
    	UNION ALL SELECT dt_fin + 1  FROM Place_utilisees
    )
    , Periodes AS (
    	SELECT dt AS dt_db , LEAD(dt) OVER (ORDER BY dt) - 1 as dt_fin
    	FROM AllDates
    )
    SELECT 
    		per.dt_db
    	,	per.dt_fin
    	,	Pl.nb_places - COALESCE(Pu.nb_places,0) AS nb_places
    FROM Periodes per
    INNER JOIN Place AS Pl
    	ON per.dt_db BETWEEN Pl.dt_db AND Pl.dt_fin
    LEFT JOIN Place_utilisees As pu
    	ON	Pu.dt_db = per.dt_db
    WHERE per.dt_fin > per.dt_db

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Je vous remercie pour votre aide.

    J'ai également un autre probléme :


    - a partir de la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    toto
    code            dt_dbt                    dt_fin           nb
    1                01/09/2012              31/12/9999         1
    2                01/09/2015              31/08/2016         0.5


    je souhaiterais alimenter une autre table tutu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dt_dbt                     dt_fin       nb
    01/09/2012              31/08/2015       1
    01/09/2015              31/08/2016     1.5
    01/09/2016              31/12/9999       1
    Merci pour votre aide

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

Discussions similaires

  1. Problème SQL suite ajout clause Where
    Par Tipstitou dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/03/2009, 05h05
  2. Problème d'ajout d'un serveur SQL
    Par nassim12 dans le forum Administration
    Réponses: 3
    Dernier message: 22/05/2008, 22h34
  3. Problème d'ajout d'un serveur SQL
    Par nassim12 dans le forum Développement
    Réponses: 0
    Dernier message: 18/05/2008, 10h28
  4. Réponses: 8
    Dernier message: 01/03/2008, 10h07
  5. Problème d'ajout multiples dans un BDD Access
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2004, 13h34

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