Какой самый эффективный способ найти все записи, которые пересекаются с другими в одной таблице? Каждая запись имеет дату начала и окончания. Например, у меня есть следующие настройки базы данных:
CREATE TABLE DEMO
(
DEMO_ID int IDENTITY ,
START date NOT NULL ,
END date NOT NULL
);
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (1, '20100201', '20100205');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (2, '20100202', '20100204');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (3, '20100204', '20100208');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (4, '20100206', '20100211');
Мой запрос выглядит следующим образом:
SELECT DISTINCT *
FROM DEMO A, DEMO B
WHERE A.DEMO_ID != B.DEMO_ID
AND A.START < B.END
AND B.START < A.END
Проблема в том, что когда в моей демонстрационной таблице есть, например, 20 000 строк, запрос занимает слишком много времени. Моя среда MS SQL Server 2008.
Спасибо за более эффективное решение