Подсчет количества бронирований между указанными датами - PullRequest
0 голосов
/ 08 марта 2012

У меня есть столик заказов. Я хочу подсчитать, сколько бронирований происходит за каждый день, начиная с указанной даты заезда и даты выезда. Например. если дата заезда была 10-06-2012, а дата отъезда - 14-06-2012, мне нужна такая таблица

Date         Bookings
10-06-2012   1
11-06-2012   1
12-06-2012   2
13-06-2012   4
14-06-2012   3

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

Ответы [ 3 ]

0 голосов
/ 08 марта 2012

Используйте SUM(), чтобы найти общее количество бронирований в диапазоне дат.

Попробуйте ниже:

SELECT Date,SUM(Bookings) 
FROM tablename
WHERE Date between 'startdate' AND 'enddate' 
GROUP BY Date
0 голосов
/ 08 марта 2012

Первое, что вам нужно, это таблица дат, день за днем.Теперь MySQL не мое дело, поэтому я постараюсь записать как можно больше информации о том, что я делаю.Пожалуйста, исправьте эти примеры.

Таблица дат может быть подготовлена ​​путем проверки работы на последнюю дату бронирования и добавления недостающих дат в таблицу дат.Если это не то, что вы бы приняли, другое решение заключается в создании таблицы динамически, но есть некоторые опасности.Насколько мне известно, создать такую ​​таблицу невозможно, но вы можете создать практически работающий суррогат, выбрав в таблице бронирования разные даты и скрестив их с таблицей дней, созданной в самом запросе:1005 * Список дней должен содержать столько дней, сколько самый большой разрыв между датами регистрации и каждой датой регистрации и датой проверки.Это то, за чем вам придется следить, или просто сделать список достаточно большим, например, на сто дней.

Теперь, когда у вас есть таблица дат, вам нужно подсчитать количество заказов, соответствующих этой дате.Полный запрос будет выглядеть так:

select tableOfDates.date, count(bookings.checkIn) bookings
from 
(
   (
    select distinct dates.date + INTERVAL days.day DAY -- OR HOWEVER you add days in mysql
      from 
         (select distinct checkIn date from bookings union select distinct checkOut from bookings) dates
         cross join (select 0 day union select 1 union select 2 union 3 union 4 union 5 union 6 union 7) days
   ) 
) tableOfDates
left join bookings
   on tableOfDates.date between bookings.checkIn and bookings.checkOut
where tableOfDates.date between [YOUR DATE RANGE]
0 голосов
/ 08 марта 2012

Я не уверен, что понимаю ваш вопрос.Приведенный ниже запрос предполагает:

  • Ваша таблица bookings имеет (как минимум) столбцы date, checkin, checkout.
  • Вы ищете заказы, где checkin >= 10-06-2012 и checkout <= 14-06-2012.

Вот запрос:

SELECT date, COUNT(*)
FROM bookings
WHERE checkin >= '2012-06-10' AND checkout <= '2012-06-14'
GROUP BY date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...