Я хочу выбрать цены за номер на 3 разных даты. У меня есть даты и номер комнаты.
Таблица PRICES_CAL выглядит следующим образом:
id room_id date_from date_to price
1 1 2019-03-01 2019-04-01 100
2 1 2019-04-02 2019-06-30 200
3 1 2019-07-01 2019-08-31 400
4 1 2019-09-01 2019-10-30 300
Проблема в том, что мой запрос возвращает одну строку, когда все три даты находятся в одном интервале date_from - date_to.
Например, для поиска цен на даты 20190327, 20190328, 20190329, я использую запрос:
SELECT price
FROM PRICES_CAL
WHERE room_id = 1 AND (
(date_from <= 20190327 AND date_to >= 20190327 )
OR (date_from <= 20190328 AND date_to >= 20190328 )
OR (date_from <= 20190329 AND date_to >= 20190329 )
) ORDER by date_from ASC;
и, к сожалению, я получаю только один результат:
price
100
Я хотел бы получить три строки результатов, по одной на каждую предоставленную мной дату.
Я уже пытался, среди других попыток «без надежды», поставить "SELECT RAND(), price ..."
, чтобы иметь разные строки для каждого условия ИЛИ и, надеюсь, получить 3 результата, но я все еще получаю один результат.
Также это:
SELECT @mydd, price
FROM PRICES_CAL
WHERE room_id = 1 AND ( date_from <= @mydd AND date_to >= @mydd )
AND @mydd in (20190327, 20190328, 20190329)
ORDER by date_from;
Это не работает. Это дает ноль результатов.
Это могло бы быть хорошо и с одним результатом, но главная проблема в том, что когда я получу 2 результата, я не смогу узнать, какому результату принадлежит мой средний input_date.
Я хочу избежать выполнения 2 разных операторов для производительности или выбрать date_from, date_to, price и сделать сравнение с моими датами, чтобы определить, где моя средняя входная дата принадлежит.
Желаемой ситуацией будет разрешение проблемы только одним запросом.
Я мог бы разобраться с кодом внутри оператора while при получении набора результатов и выборе всего из таблицы, но я также хотел бы узнать, как это сделать с помощью запроса.
Желаемое решение будет иметь три результата
100
100
100
ИЛИ даже лучше,
20190327 100
20190328 100
20190329 100
Любое предложение приветствуется. заранее спасибо.