[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Интервалы дат, запрос на выборку
to0n1
Всем привет! Задача вроде тривиальна, но все же мой мозг с первого раза ее не осилил :(

Ситуация такова есть таблица тарифов

tarifs(id INT() AI, date_start TIME_STAMP, date_stop TIME_STAMP, item_id INT())


есть тарифы для разных итемов

а вот задача проверить нет ли тарифов которые накладываются друг на друга для каждого итема и если есть вернуть массив их id.

т.е. например

1, 2012-06-01, 2012-06-21, 10
2, 2012-06-22, 2012-06-29, 10
3, 2012-06-01, 2012-06-21, 33
4, 2012-06-19, 2012-06-23, 33
5, 2012-06-24, 2012-06-29, 33

при таких данных запрос должен вернуть id 3 и 4 так как они пересекаются

написал вот такой запрос


SELECT
a.date_start, a.date_stop, a.id_item
FROM
tarifs as a
LEFT JOIN
tarifs as b ON b.id_item =a.id_item
WHERE
(
b.date_start between a.date_start AND a.date_stop
OR
b.date_stop between a.date_start AND a.date_stop
)
AND
a.id != b.id


вроде он и работает но как то не так как нужно... то конфликтующий тариф 2 раза возвращает, то вместо тарифов которые пересеклися только 1 возвращает ... ну в общем не стабильно как то :(

Уважаемые гуру sql прошу руки помощи!



Спустя 1 час, 41 минута, 38 секунд (18.03.2012 - 05:39) Visman написал(а):
Странно, но всегда возвращает 3 и 4 позицию.

Спустя 7 часов, 24 минуты, 31 секунда (18.03.2012 - 13:03) to0n1 написал(а):
Да, странно ... это правильный результат, но на больших объемах он ведет себя странно...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.