Si vous avez déjà des entrées pour chaque jour, cela devrait fonctionner, mais si vous n'en avez pas, les frais généraux sont importants, et si cette requête est utilisée souvent, cela affectera les performances.
Si les données sont dans ce format, vous pouvez détecter les chevauchements en utilisant une simple arithmétique de date, car un chevauchement est simplement un intervalle qui commence après un intervalle donné, mais avant que celui-ci soit terminé, quelque chose comme
select dr1.* from date_ranges dr1
inner join date_ranges dr2
on dr2.start > dr1.start -- start after dr1 is started
and dr2.start < dr1.end -- start before dr1 is finished
Si vous avez besoin d'un traitement spécial pour les intervalles qui sont entièrement dans un autre intervalle, ou si vous avez besoin de fusionner des intervalles, c'est à dire
PKey Start End Type
==== ===== === ====
01 01/01/2010 20/01/2010 S
02 15/01/2010 31/01/2010 S
donnant accès à
Start End Type
===== === ====
01/01/2010 31/01/2010 S
vous aurez besoin de calculs plus complexes.
D'après mon expérience de ce genre de problèmes, une fois que vous avez appris à faire le calcul à la main, il est facile de le transférer en SQL :)
0 votes
01
ne se chevauche pas02
. Pourquoi voudriez-vous vous débarrasser de02
?0 votes
J'ai compris que cela signifiait : sélectionner les lignes où l'intervalle défini dans la ligne chevauche tout intervalle défini dans d'autres lignes.
0 votes
Je cherche des enregistrements qui se chevauchent entre les types S et A.