Joindre de table avec des interval de dates diffrentes [Résolu]

Signaler
Messages postés
11
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
7 novembre 2020
-
Messages postés
11
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
7 novembre 2020
-
Bonjour,

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

creation des tables

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);

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);

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)

;


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);


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

requete pour recuperer les données de la fusion


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'
   ;
  


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

Probleme

Entre le 1996-01-01 et 2001-12-31 il n y'a aucune donnée.
pouvez vous m'aider s'il vous plait?
Merci
--

1 réponse

Messages postés
8
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
7 novembre 2020
1
Bonjour,

Je n'y connais pas grand chose en SQL pour le moment.

Néanmoins, en lisant votre code, je constate quelques points intriguants :

1. Dans la création de la table, vous utilisez 2 formats de dates : AAAA-MM-JJ (lignes 45 à 57) et AAAA/MM/JJ (lignes 71 à 93). Sur certaines lignes, il existe même des dates aux formats différents (exemple ligne 71). Par contre, il n'y a qu'n seul format dans la requête (AAA-MM-JJ).

2. Dans la création de la table, vous mettez des années incorrectes (3002 ligne 71, 3009 ligne 82, etc.).

Je vous invite à uniformiser le format des dates et à corriger les dates erronées, le problème vient peut-être de là.

Gandalfix

"Mieux vaut rester silencieux et passer pour un imbécile, que parler, et n'en laisser aucun doute."
Abraham Lincoln
Messages postés
11
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
7 novembre 2020

Merci pour la réponse
J'ai effectivement corrigé suivant vos remarques.
mais j'ai résolu le problème en ajoutant une close where pour les dates qui se trouvent les deux dates recherchées.
Merci