Ситуация такова есть таблица тарифов
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 написал(а):
Да, странно ... это правильный результат, но на больших объемах он ведет себя странно...