Текущий архив: 2004.04.04;
Скачать: CL | DM;
Вниз
SQL запрос Найти похожие ветки
← →
MakNik © (2004-03-03 17:44) [0]Есть таблица у которой есть поля DateBegin, DateEnd, ....
Наполнение:
DateBegin DateEnd
01.01.2003 08.01.2003
09.01.2003 20.01.2003
21.01.2003 10.02.2003
Задача в следующем:
нужно определить есть ли в определенный период между датами "дырки" или наложения дат?
(Следующая запись должна начинаться с DateEnd+1 предыдущей записи)
Помогите, пожалуйста, написать запрос или алгоритм для определения соответствию вышеуказанным критериям!!!
← →
AlexanderVasjuk (2004-03-03 18:40) [1]вообще-то вопрос в БД...
я бы сделал это в процедуре.
но можно и запросом.
работать будет долго.
типа того
select *
from t t1
where not exists (select * from t t2 where t2.datebeg = t1.dateend)
or exists (select * from t t3 where t3.datebeg between t1.datebeg and t1.dateend or t3.dateend between t1.datebeg and t1.dateend)
если хоть что-то вернет, значит критерий не выполняется
← →
AlexanderVasjuk (2004-03-03 18:41) [2]вторую строка исправить
where not exists (select * from t t2 where t2.datebeg = t1.dateend + 1)
← →
kaif © (2004-03-03 19:37) [3]А первичный ключ имеется? Что значит "есть промежутки"? Между идущими "в каком-то смысле" подряд записями или вообще? То есть можно ли внавал наложить все промежутки на ость t и потом сказать - вот дырка?
Пересечения видимо поймать не так сложно:
SELECT *
FROM
MYTABLE T1,
MYTABLE T2
WHERE
(T1.BEGIN_DATE <> T2.BEGIN_DATE AND
T1.END_DATE <> T2.END_DATE) /*или несовпадение первичного ключа*/
AND
(T2.BEGIN_DATE BETWEEN T1.BEGIN_DATE AND T1.END_DATE)
А вот дырки... Не знаю. Johnmen точно может. :)
Страницы: 1 вся ветка
Текущий архив: 2004.04.04;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.021 c