Каков наиболее эффективный способ найти все записи, которые накладываются друг на друга в одной таблице? Каждая запись имеет дату начала и окончания. Например, у меня есть следующие настройки базы данных:Поиск эффективных перекрывающихся записей в таблице SQL
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. Спасибо за любое более эффективным решение
Добавить индексы в начале/конце колонны. – bobince
Я думаю, вы также должны использовать A.DEMO_ID
Thierry