окружающей среды является SQL Server 2014.Объединить смежные, пересекающиеся и встроенные диапазоны в взаимоисключающие диапазоны
Я имею дело с сокращением многих деталей страхового охвата (небольшие диапазонов первый и последний) в гораздо большем взаимоисключающий (ME) диапазоны непрерывной регистрации.
Для большей ясности проблема сводится к выборке данных, отсортированных по id, во-первых, последним. F (n) и L (n) - это первое и последнее значения в записи n внутри id.
Большинство диапазонов подробно типичные
- смежный, F (п) = L (п-1) + 1
Но есть дьявол в деталях - добро пожаловать в реальном мире информации ,
- соединены несмежных, Р (п) < = L (п-1)
- встроен L (п) < = L (п-1)
- перекрытия L (п) > L (п-1)
- отсоединен несмежные
- зазора определяет границы консолидированных диапазонов, которые являются взаимоисключающими
- ME (я) .last = макс преждепользования L
Эта фотография показывает, в большинстве случаев
Have
1 30 60 90 120
+-------+--------+--------+--------+
1 +-------+ (1:30)
2 +-------+ (31:60) adjacent
3 +--+ (40:50) embedded
4 + (61:61) adjacent some earlier
5 +-+ (61:65) adjacent some earlier
6 +--+ (61:75) adjacent some earlier
7 +--+ (65:80) overlap
8 +---------+ (85:120) gap, boundaries of ME ranges located
9 +-------+ (91:120)
10 +--+ (110:120)
Want
1 30 60 90 120
+-------+--------+--------+--------+
1 +----------------------+ (1:80)
2 +---------+ (85:120)
There are other unusual cases, such as embed followed by gap
.....
..
....
AAAAA BBBB
DROP TABLE #Details
CREATE TABLE #Details (id int, first int, last int);
insert into #Details values (1, 1, 30);
insert into #Details values (1, 31, 60);
insert into #Details values (1, 40, 50);
insert into #Details values (1, 61, 75);
insert into #Details values (1, 65, 80);
insert into #Details values (1, 85, 120);
insert into #Details values (1, 91, 120);
insert into #Details values (1, 110, 120);
Я прочитал некоторые ответы на стек и Refactoring Ranges, но не может сделать прыжок к моему размещение данных.
--Для jpw--
Типичный анализ может включать в себя 20000 идентификаторов с 200 подробных записей. Эти случаи были обработаны путем загрузки на локальный компьютер и обработаны (как курсором) на шаге SAS Data. В худшем случае - порядка 650 тыс. Идентификаторов и 150 млн. Деталей - слишком много данных для загрузки и приводит к другим проблемам с ресурсами. Я считаю, что все детали могут находиться в диапазоне строк 1.2B. Несмотря на это, если все это можно сделать на SQL-сервере, весь процесс упрощается.
Примерно сколько строк есть в таблице? Сотни, тысячи, миллионы и более? – jpw
Типичный анализ может включать 20 000 идентификаторов с 200 подробными записями. – Richard
Я пробовал свой подход к большему набору данных, и оказалось, что он вообще не работает ... подумает об этом немного подробнее. – jpw