Запрос Mysql для извлечения записи с использованием между двумя датами

У меня есть одно требование, и я совершенно не понимаю, как написать запрос. Я новичок в этой компании, поэтому, пожалуйста, помогите мне.

Пользователь выберет следующие даты:

Пример: fromDate: 2013-08-02 toDate: 2013-09-03 (ГГГГ-ММ-ДД)

id  resort_id   room_id Date1       Date2       price
5   35      45          2013-11-01  2013-11-30  3000.00
6   35      50          2013-07-25  2013-08-25  2000.00
7   35      541         2013-07-25  2013-08-25  4000.00
8   35      541         2013-08-26  2013-09-26  4000.00

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

Ожидаемый результат

id  resort_id   room_id     Date1       Date2       price
6   35      50              2013-07-25  2013-08-25  2000.00
7   35      541             2013-07-25  2013-08-25  4000.00
8   35      541             2013-08-26  2013-09-26  4000.00

OR

id  resort_id      room_id  price
6   35             50       2000.00
7   35             541      8000.00

person user2660409    schedule 07.08.2013    source источник
comment
Можете ли вы объяснить, что такое Date1 и Date2?   -  person zxc    schedule 07.08.2013
comment
это сложный запрос   -  person SoWhat    schedule 07.08.2013
comment
@bew Я думаю, что это диапазоны дат для этой цены   -  person SoWhat    schedule 07.08.2013
comment
Date1 и Date 2 аналогичны from_date и to_date. цена должна отображаться в результате, если пользователь указал дату между date1 и date2   -  person user2660409    schedule 07.08.2013
comment
@SomeshMukherjee да, ты прав   -  person user2660409    schedule 07.08.2013
comment
прежде всего вам нужно сохранить эти даты как столбец типа даты mysql. В противном случае этот запрос будет довольно сложно выполнить. Так что конвертируйте эти   -  person SoWhat    schedule 07.08.2013
comment
@SomeshMukherjee хорошо, я преобразую в тип DATE, можете ли вы рассматривать это как тип DATE и предоставить мне запрос?   -  person user2660409    schedule 07.08.2013
comment
Я должен составить запрос. На самом деле это не простой запрос. Честно говоря, именно для этого нанимают администраторов баз данных. Так что мне нужны данные, чтобы проверить это на   -  person SoWhat    schedule 07.08.2013
comment
также первая строка имеет неверные данные 16 - это не месяц.   -  person SoWhat    schedule 07.08.2013
comment
Дата mysql имеет формат гггг-мм-дд. мне нужен такой формат   -  person SoWhat    schedule 07.08.2013
comment
@SomeshMukherjee Я изменил формат даты здесь, а также в своей таблице.   -  person user2660409    schedule 07.08.2013


Ответы (6)


Попробуйте этот запрос

SELECT * FROM `rooms` WHERE "2013-08-02" between Date1 AND Date2 UNION 
SELECT * FROM `rooms` WHERE "2013-09-03" BETWEEN Date1 AND Date2

Это единственный запрос. Распределите его на две строки для удобства чтения. Я почти уверен, что в этом запросе чего-то не хватает. Мне понадобится больший тестовый набор для проверки. Это не будет выбирать средние случаи. Измените первую дату на даты, выбранные вашим пользователем.

person SoWhat    schedule 07.08.2013
comment
@SomeshMukerjee Этот запрос работает нормально, и я получаю первый ожидаемый результат. - person user2660409; 07.08.2013
comment
Я написал один запрос, и я получаю второй ожидаемый результат. SELECT resort_id, room_id, SUM( test_price.price ) FROM test_price WHERE '2013-08-02' BETWEEN from_date AND to_date OR '2013-09-03' BETWEEN from_date AND to_date GROUP BY room_id - person user2660409; 07.08.2013
comment
будьте осторожны, хотя это может не сработать, если дата выпадает на период с января 2013 года по октябрь 2013 года. Он не будет выбирать промежуточные комнаты, но вы сможете построить отсюда - person SoWhat; 07.08.2013

SELECT * FROM lr_price_peak_rates  WHERE  `from_date`>='2014-04-08' AND `to_date`<='2014-04-30' 

попробуйте приведенный выше запрос, он может работать нормально

person Raja Ram T    schedule 02.04.2014

Попробуйте этот запрос

SELECT
  id,
  resort_id,
  room_id,
  Date1,
  Date2,
  SUM(price) AS Total_Price
FROM
  MyTable
WHERE Date1> '2013-02-08' AND Date2 < '2013-02-09'
person aizaz    schedule 07.08.2013
comment
@SomeshMukherjee Спасибо за ваш комментарий. Crescent Можете ли вы предоставить мне запрос выбора на основе интервала? - person user2660409; 07.08.2013
comment
@SomeshMukherjee я указал формат гггг-мм-дд. заранее спасибо - person user2660409; 07.08.2013

эй, попробуй это (сервер sql)

ВЫБЕРИТЕ room_id,СУММА(цена) ИЗ @table, ГДЕ date1>='25/07/2013' AND date2‹='26/09/2013' СГРУППИРОВАТЬ ПО room_id

person zxc    schedule 07.08.2013
comment
Это отлично работает с указанной вами датой. Но пользователь может выбрать любой диапазон дат. - person user2660409; 07.08.2013

SELECT * FROM rooms WHERE дата между Date1 AND Date2 UNION SELECT * FROM rooms WHERE date BETWEEN Date1 AND Date2

person user3057670    schedule 17.01.2014

person    schedule
comment
пользовательские даты должны быть между date1 и date2. например: дата: 02.08.2013 применима с идентификатором строки: 6 и 7, дата: 02.09.2013 применима с идентификатором строки 8. Используя ваш запрос, я получаю 0 результатов. - person user2660409; 07.08.2013