Мой запрос
SELECT RoomType, date FROM Superior WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
UNION
SELECT RoomType, date FROM Deluxe WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
UNION
SELECT RoomType, date FROM SuperDeluxe WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
ORDER BY date
HAVING COUNT(date, INTERVAL 3 DAY)
Получение синтаксической ошибки рядом с 'HAVING COUNT(date, INTERVAL 3 DAY)
Моя цель - получить результаты для типа номера с датами и наличием более 3 дней.
** В таблице для Superior и Deluxe на дату 2012-06-29 Avail=0, для SuperDeluxe все даты доступны
В этом случае мой результат должен отображать только SuperDeluxe как доступность, но
**RoomType** **date**
Superior 2012-06-26
Superior 2012-06-27
Superior 2012-06-28
Deluxe 2012-06-26
Deluxe 2012-06-27
Deluxe 2012-06-28
SuperDeluxe 2012-06-26
SuperDeluxe 2012-06-27
SuperDeluxe 2012-06-28
SuperDeluxe 2012-06-29
Да, это MySQL, я просто пытаюсь доказать себе, что могу сделать это, помогая моему дяде. Как вы знаете, я не сезонник, а только новичок. Вы правильно догадались, все 3 таблицы неоднозначны. У меня есть еще одно поле Avail, в котором отслеживается количество свободных номеров. Когда бронирование завершено, он автоматически рассчитывает доступные номера.
Мои текущие запросы используют выбор варианта типа комнаты, который может генерировать доступность только для типа комнаты для каждого запроса. С учетом вышеизложенного я планировал получить 1 запрос и сгенерировать любой тип комнаты, доступный в диапазоне дат. Проблема, с которой я сталкиваюсь, когда использую приведенный выше запрос на объединение, результат, который я получаю, также включает одну из дат в диапазоне, в котором доступность = 0
Я пытался что-то вроде этого
SELECT RoomType, COUNT( date )
FROM Superior
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > '0'
UNION
SELECT RoomType, COUNT( date )
FROM Deluxe
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > '0'
UNION
SELECT RoomType, COUNT( date )
FROM SuperDeluxe
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > '0'
GROUP BY date
HAVING COUNT( 4 )
Кажется, я приближаюсь. Я попробовал MAX (дата), он дает дату с 4 строками, но по-прежнему отображает 1 строку типа комнаты, для которой доступно> 0
Я также пробовал HAVING COUNT (DISTINCT date) = 4 Результаты по-прежнему отображают дату поля со строками, не равными 4
Availability
, флаг 0 или 1? Это целое число, описывающее доступные дни? - person ypercubeᵀᴹ   schedule 29.06.2012HAVING
. - person Kane   schedule 29.06.2012