SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.05.2010 15:29:02

extsps
Участник
Зарегистрирован: 13.05.2010
Сообщений: 2

Help по выборке записей по дате

Привет форумчанам!

Есть проблема. Для начала опишу идею.
Задание - сделать калькуляцию стоимости тура (отдых) с определенной даты по определенную дату.

База:
id - INT(11) - autoinc
date_from - date (00-00-0000)
date_to - date (00-00-0000)
parice - vchar 5 NOT NULL
hotel_id - vchar 5 NOT NULL

Сложность - даты в записях могут пересекаться, нужно посчитать стоимость тура за дни, при этом с каждого пересечения нужно выбрать меньшую стоимость для отеля с id 1.

Пример текстовый (для более наглядного примера смотрим прикрепленный файл):
id   date from      date to        Price  Hotel_id
1    22-04-2010   26-04-2010  100    1
2    27-04-2010   02-05-2010  200    1
3    24-04-2010   28-04-2010  150    1

То есть в итоге нужно вытащить ответ с, например, 23-04-2010 по 01-05-2010 одной строкой по следующему принципу:
Смотрим в каких периодах на этот день меньшая цена и прибавляем меньшую. В тоге должен получится ответ 1300

Огромное спасибо за помощь!

ЗЫ: добавляю: может быть о одна запись в базе по текущему отелю, то есть в током случае просто просуммировать стоимость каждого дня. Может быть 2,4 и тд. Спасибо! Если кто с Киева поможет, то с меня пиво! smile

Отредактированно extsps (13.05.2010 15:35:56)


Прикрепленные файлы:
Attachment Icon Untitled-2.jpg, Размер: 98,152 байт, Скачано: 349

Неактивен

 

#2 13.05.2010 18:33:29

extsps
Участник
Зарегистрирован: 13.05.2010
Сообщений: 2

Re: Help по выборке записей по дате

Сделал, помогли. Кому надо может:
CREATE PROCEDURE `procedure1`(IN hotel_ident INT, IN date_in DATE, IN date_off DATE)
BEGIN
DECLARE s_date DATE;
SET s_date = date_in;
drop temporary table if exists `days`;
create temporary table `days`(`day` date not null,PRIMARY KEY (`day`)) ENGINE=MEMORY;
  WHILE s_date <= date_off DO
    INSERT INTO days (`day`) VALUES (s_date);
    SET s_date=DATE_ADD(s_date, INTERVAL 1 DAY);
  END WHILE;
  select sum(price) as total from (select (select min(price) from prices where prices.date_from <=`days`.`day` and prices.date_to>=`days`.`day`) as price from `days`) subtable;
END;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson