Celui-ci est difficile à résoudre.Résolution des plages de chevauchement hiérarchisées dans SQL Server
J'ai une table contenant des plages de dates, chaque plage de dates a une priorité. La priorité la plus élevée signifie que cette plage de dates est la plus importante.
Ou dans SQL
create table #ranges (Start int, Finish int, Priority int)
insert #ranges values (1 , 10, 0)
insert #ranges values (2 , 5 , 1)
insert #ranges values (3 , 4 , 2)
insert #ranges values (1 , 5 , 0)
insert #ranges values (200028, 308731, 0)
Start Finish Priority
----------- ----------- -----------
1 10 0
2 5 1
3 4 2
1 5 0
200028 308731 0
Je voudrais lancer une série de requêtes SQL sur ce tableau qui se traduira par la table ayant aucune plage qui se chevauchent, il est de prendre les plages la plus haute priorité sur les niveaux inférieurs . Séparez les plages au besoin et débarrassez-vous des plages dupliquées. Cela permet des lacunes.
Ainsi, le résultat devrait être:
Start Finish Priority
----------- ----------- -----------
1 2 0
2 3 1
3 4 2
4 5 1
5 10 0
200028 308731 0
Quelqu'un veut donner un coup de feu au SQL? Je voudrais aussi que ce soit aussi efficace que possible.
Solution impressionnante! –
Assez intelligent. J'ai pris un peu d'huile de coude pour l'adapter à des colonnes de départ/arrivée nulles et à des groupes de niveau supérieur, mais cela m'a probablement sauvé deux bonnes journées de claquement de mur! – Aaronaught