Спасибо за ваши ответы, Мартин, вы произвели 2 строки, но без дней ... Эмилио, ваш ответ заставил меня задуматься о том, как я установил ставки.Я изменил таблицу тарифов на формат даты вместо datetime и сделал rate_end_date в тот же день, что и следующий date_start_date.
0 66 2011-01-01 2011-04-15
1 70 2011-04-15 2011-06-01
2 80 2011-06-01 2011-07-01
3 100 2011-07-01 2011-09-01
4 80 2011-09-01 2011-10-01
5 70 2011-10-01 2011-11-01
6 45 2011-11-01 2012-01-01
, затем сбросил +1 и
SELECT rates.rate_id, rate_start_date, rate_end_date, rate_price,
(DATEDIFF( IF (rate_end_date > '2011-04-16' , '2011-04-16', rate_end_date),
IF ( rate_start_date < '2011-04-14' , '2011-04-14' , rate_start_date )) )
AS days FROM rates WHERE rate_start_date <= '2011-04-16'
AND rate_end_date > '2011-04-14'
ORDER BY rate_price ASC
произвел
rate_id rate_start_date rate_end_date rate days
0 2011-01-01 2011-04-15 66 1
1 2011-04-15 2011-06-01 70 1
и запрос без перекрывающихся тарифов с 1 по 8 апреля:
SELECT rates.rate_id, rate_start_date, rate_end_date, rate_price,
(DATEDIFF( IF (rate_end_date > '2011-04-08' , '2011-04-08', rate_end_date),
IF ( rate_start_date < '2011-04-01' , '2011-04-01' , rate_start_date )) )
AS days FROM rates WHERE rate_start_date <= '2011-04-08'
AND rate_end_date > '2011-04-01'
ORDER BY rate_price ASC
производит:
rate_id rate_start_date rate_end_date rate days
0 2011-01-01 2011-04-15 66 7
спасибо agiain за вашу помощь!