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

Langage SQL Discussion :

Joindre des tables avec des intervalles de dates différentes


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Joindre des tables avec des intervalles de dates différentes
    sur sqliddle.com j'ai http://www.sqlfiddle.com/#!9/83d1a4/5
    il y a une partie qui n'apparait pas sur le tableau résultat je ne sais pas pourquoi .
    je vous envoie le code

    je veux récupérer le résultat après la fusion de plusieurs tables le code est le suivant

    création des tables

    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
    CREATE TABLE `tauxcotisation` (
    `date_debut` date NOT NULL,
    `date_fin` date NOT NULL,
    `tauxsal` decimal(6,3) NOT NULL,
    `tauxemp` decimal(6,3) NOT NULL
    );
     
    INSERT INTO `tauxcotisation` (`date_debut`, `date_fin`, `tauxsal`, `tauxemp`) VALUES
    ('1961-01-01', '1966-06-30', 0.34, 0.34),
    ('1966-07-01', '1972-06-30', 0.15, 0.34),
    ('1972-07-01', '1972-09-30', 0.17, 0.34),
    ('1972-10-01', '1973-06-30', 0.17, 0.34),
    ('1973-07-01', '1980-02-29', 0.17, 0.34),
    ('1980-03-01', '1989-06-30', 0.17, 0.34),
    ('1989-07-01', '1995-12-31', 0.17, 0.34),
    ('1996-01-01', '2001-12-31', 0.41, 0.34),
    ('2002-01-01', '2010-01-01', 0.17, 0.34),
    ('2010-01-02', '2050-01-01', 0.17, 0.34);
    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
    CREATE TABLE `carriere` (
    `matricule` varchar(20) NOT NULL,
    `employeur` varchar(20) NOT NULL,
    `corps` varchar(20) NOT NULL,
    `grade` varchar(20) NOT NULL,
    `start_sal` date NOT NULL,
    `end_sal` date NOT NULL,
    `sal_base` decimal(9,3) NOT NULL
    );
     
    INSERT INTO `carriere` (`matricule`, `employeur`, `corps`,`grade`, `start_sal`, `end_sal`, `sal_base`) VALUES
    ('994320', 'DBGT','Enseignant', 'Hierarchie A','1992-09-21', '2005-08-12', 4500),
    ('994320', 'CAMRAIL','Fonctionnaire', 'Hierarchie B','2005-08-13', '2009-09-16', 4900),
    ('994320', 'CCM','Universitaire', 'Autre','2009-09-17', '2019-07-12', 5300),
    ('994321', 'DBPNT','Enseignant', 'Hierarchie A','2002-09-21', '2005-08-12', 4500),
    ('994321', 'CAMRAIL','Fonctionnaire', 'Hierarchie B','2005-08-13', '2009-09-16', 4900),
    ('994322', 'DOUALPORT','Universitaire', 'Autre','2009-09-17', '2019-07-12', 5300);
    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
    22
    CREATE TABLE `augmentation` (
    `St_date` date NOT NULL,
    `Ed_date` date NOT NULL,
    `grade` varchar(20) NOT NULL,
    `Montant` decimal(9,3) NOT NULL
    );
     
    INSERT INTO `augmentation` (`St_date`, `Ed_date`,`grade`, `Montant`) VALUES
    ('1991-01-21', '2002-09-20','Hierarchie A', 201),
    ('1991-01-21', '2002-09-20','Hierarchie A', 201),
    ('2002-09-21', '2006-07-11','Hierarchie A', 200),
    ('2006-07-12', '2019-09-22','Hierarchie A', 210),
    ('1991-01-21', '2002-09-20','Hierarchie B', 201),
    ('1991-01-21', '2002-09-20','Hierarchie B', 201),
    ('2002-09-21', '2006-07-11','Hierarchie B', 200),
    ('2006-07-12', '2019-09-22','Hierarchie B', 210),
    ('1991-01-21', '2002-09-20','Autre', 201),
    ('1991-01-21', '2002-09-20','Autre', 201),
    ('2002-09-21', '2006-07-11','Autre', 200),
    ('2006-07-12', '2019-09-22','Autre', 210)
     
    ;

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    CREATE TABLE `rubrique` (
    `deb` date NOT NULL,
    `fin` date NOT NULL,
    `lblrubrique` varchar(20) NOT NULL,
    `corps` varchar(20) NOT NULL,
    `tauxrubrique` decimal(6,3) NOT NULL
    );
     
    INSERT INTO `rubrique` (`deb`, `fin`, `lblrubrique`, `corps`, `tauxrubrique`) VALUES
    ('1991-01-01','3002/01/01' ,'css', 'Fonctionnaire', 0.20 ),
    ('2002/01/01','3002/01/01' , 'ir', 'Fonctionnaire', 0.14 ),
    ('1991/01/01','3002/01/01' ,'css', 'Enseignant', 0.20 ),
    ('2002/01/01','3002/01/01' , 'ir', 'Enseignant', 0.14 ),
    ('1900/06/30', '1989/12/31', 'ie', 'Enseignant', 0.20 ),
    ('1990/01/01', '2003/09/30', 'ie', 'Enseignant', 0.30),
    ('2003/10/01', '2005/09/30', 'ie', 'Enseignant', 0.35 ),
    ('2005/10/01', '2006/09/30', 'ie', 'Enseignant', 0.38),
    ('2006/10/01', '2007/09/30', 'ie', 'Enseignant', 0.41 ),
    ('2007/10/01', '2008/09/30', 'ie', 'Enseignant', 0.44 ),
    ('2008/10/01', '2009/09/30', 'ie', 'Enseignant', 0.47 ),
    ('2009/10/01', '3009/10/01', 'ie', 'Enseignant', 0.50 ),
    ('2002/01/01','3002/01/01' ,'css', 'Universitaire', 0.20 ),
    ('2002/01/01','3002/01/01' , 'ir', 'Universitaire', 0.14 ),
    ('1900/06/30', '1989/12/31', 'ie', 'Universitaire', 0.20 ),
    ('1990/01/01', '2003/09/30', 'ie', 'Universitaire', 0.30 ),
    ('2003/10/01', '2005/09/30', 'ie', 'Universitaire', 0.35 ),
    ('2005/10/01', '2006/09/30', 'ie', 'Universitaire', 0.38 ),
    ('2006/10/01', '2007/09/30', 'ie', 'Universitaire', 0.41 ),
    ('2007/10/01', '2008/09/30', 'ie', 'Universitaire', 0.44 ),
    ('2008/10/01', '2009/09/30', 'ie', 'Universitaire', 0.47 ),
    ('2009/10/01', '3009/10/01', 'ie', 'Universitaire', 0.50 ),
    ('2005/01/01', '2020-10-09', 'irf', 'Universitaire', 1.05);
    +++++++++++++++++++++++++++++++++++++++++++++++

    requête pour récupérer les données de la fusion


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    SELECT
    greatest(begin_date1,deb) AS begin_date2,
    least(end_date1,fin) AS end_date2,
    sal_base,
    tauxsal,
    tauxemp,
    Montant,
    lblrubrique,
    corps
    FROM rubrique,
     
    ((SELECT
    greatest(begin_date,St_date) AS begin_date1,
    least(end_date,Ed_date) AS end_date1,
    sal_base,
    tauxsal,
    tauxemp,
    grade,
    Montant
    FROM augmentation,
    (
    SELECT
    greatest(start_sal,date_debut) AS begin_date,
    least(end_sal,date_fin) AS end_date,
    sal_base,
    tauxsal,
    tauxemp
    FROM tauxcotisation, carriere
    WHERE ((start_sal >= date_debut AND start_sal <= date_fin )
    OR (end_sal >= date_debut AND end_sal <= date_fin ))
    AND matricule = '994320' AND (start_sal = '1992-09-21' AND end_sal = '2005-08-12')
     
     
     
    )as tab
    WHERE ( begin_date >= St_date AND begin_date <= Ed_date)
    OR ( end_date >= St_date AND end_date <= Ed_date))as tab1)
     
    WHERE (( begin_date1 >= deb AND begin_date1 <= fin)
    OR ( end_date1 >= deb AND end_date1 <= fin))
    AND corps = 'Enseignant'
    AND grade = 'Hierarchie A'
    ;

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    Problème

    Entre le 1996-01-01 et 2001-12-31 il n y'a aucune donnée.

    sur sqlfiddle http://www.sqlfiddle.com/#!9/83d1a4/5
    pouvez vous m'aider s'il vous plait?
    Merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonsoir,

    Un exemple de résultat attendu serait le bienvenu

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Joindre des tables avec des intervals de dates diffrentes
    Bonsoir ,merci de répondre
    le résultat attendu est un tableau qui joint les différentes tables dans un intervalle de date entre la date de début(start_sal) et la date de fin(end_sal) spécifiée dans la table carrière ici dans le bloc
    matricule = '994320' AND (start_sal = '1992-09-21' AND end_sal = '2005-08-12')
    selon le schéma sur le site sqlfiddle.com sur ce lien http://www.sqlfiddle.com/#!9/83d1a4/5
    si vous remarquez ça marche plutôt bien mais ne recupere pas intervalle Entre le 1996-01-01 et 2001-12-31

    Merci encore

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Joindre des tables avec des intervals de dates diffrentes
    Merci a tous j'ai résolu le problème
    Bonne journée

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/08/2018, 16h41
  2. Joindre 2 tables avec une date
    Par demerius dans le forum Développement
    Réponses: 4
    Dernier message: 18/05/2017, 10h06
  3. Joindre deux tables avec max sur date
    Par Asdorve dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/11/2012, 12h04
  4. [WebI Xi] Créer des rapports pour dates différentes pour une même requête
    Par MorningMemories dans le forum Débuter
    Réponses: 2
    Dernier message: 22/03/2012, 16h59
  5. Joindre 3 tables avec une au centre !
    Par skydig dans le forum Requêtes
    Réponses: 9
    Dernier message: 26/11/2010, 01h44

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