Union d'intervalles de dates
pierre0042
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
pierre0042 -
pierre0042 -
Bonjour,
J'ai une table avec (en gros) 3 champs : un Id, un champ DateDebut et un champ DateFin.
ça me fait donc une liste d'intervalles de dates différents.
comment puis-je faire pour obtenir l'union ou l'intersection de ces intervalles (ou d'une partie) en SQL ?
je ne trouve rien dans les fonctions de dates qui gère ça.
(j'utilise SQL Server 2008).
Merci d'avance,
J'ai une table avec (en gros) 3 champs : un Id, un champ DateDebut et un champ DateFin.
ça me fait donc une liste d'intervalles de dates différents.
comment puis-je faire pour obtenir l'union ou l'intersection de ces intervalles (ou d'une partie) en SQL ?
je ne trouve rien dans les fonctions de dates qui gère ça.
(j'utilise SQL Server 2008).
Merci d'avance,
A voir également:
- Union d'intervalles de dates
- Nombre de jours entre deux dates excel - Guide
- Trait d'union insécable word - Guide
- S'envoyer de l'argent a soi meme western union - Forum Vos droits sur internet
- Trouver une date de naissance gratuit - Forum Webmastering
- Code erreur western union ✓ - Forum Vos droits sur internet
3 réponses
Oui bien sur.
Prenons comme données (id, date1, date2) :
1, 03/05/2005, 12/11/2005
2, 04/08/2005, 02/05/2006
3, 23/04/2006, 30/03/2007
4, 24/07/2007, 17/02/2008
5, 23/06/2008, 31/12/2008
l'union pour id <= 3 donne 03/05/2005, 30/03/2007
l'union pour id in (3, 4) donne 23/04/2006, 30/03/2007 et 24/07/2007, 17/02/2008
l'intersection pour id <= 2 donne 04/08/2005, 12/11/2005
l'intersection pour id >= 3 donne NULL
Prenons comme données (id, date1, date2) :
1, 03/05/2005, 12/11/2005
2, 04/08/2005, 02/05/2006
3, 23/04/2006, 30/03/2007
4, 24/07/2007, 17/02/2008
5, 23/06/2008, 31/12/2008
l'union pour id <= 3 donne 03/05/2005, 30/03/2007
l'union pour id in (3, 4) donne 23/04/2006, 30/03/2007 et 24/07/2007, 17/02/2008
l'intersection pour id <= 2 donne 04/08/2005, 12/11/2005
l'intersection pour id >= 3 donne NULL
SELECT MIN(limite_basse.date1) AS minDT, MAX(limite_haute.date2) AS maxDT FROM intervalle AS limite_basse INNER JOIN intervalle AS limite_haute ON limite_basse.date2 BETWEEN limite_haute.date1 AND limite_haute.date2 WHERE limite_basse.id IN (3,4) AND limite_haute.id IN (3,4);
Et pour l'utiliser dans un autre SQL :
SELECT * FROM (SELECT MIN(limite_basse.date1) AS minDT, MAX(limite_haute.date2) AS maxDT FROM intervalle AS limite_basse INNER JOIN intervalle AS limite_haute ON limite_basse.date2 BETWEEN limite_haute.date1 AND limite_haute.date2 WHERE limite_basse.id IN (3,4) AND limite_haute.id IN (3,4)) intervalle INNER JOIN evenement ON evenement.dt BETWEEN intervalle.minDT AND intervalle.maxDT - INTERVAL 1 SECOND;