SQL СУММИРУЕТ проверку того, находится ли дата в пределах диапазона

#mysql #sql

Вопрос:

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

введите описание изображения здесь

Так, например, 03.09.2021 мне нужно будет добавить 2 взрослых из бронирования 178458, 4 взрослых из бронирования 178459, 3 взрослых из бронирования 178460 и 1 взрослого из бронирования 178462, что даст мне в общей сложности 10 взрослых.

введите описание изображения здесь

Как я могу это получить? Большое спасибо

Комментарии:

1. Отметьте свой вопрос в базе данных, которую вы используете. У вас есть под рукой таблица календаря?

2. Создайте справочную таблицу календаря/cte. ПОЖАЛУЙСТА, ПРИСОЕДИНЯЙТЕСЬ, ГРУППИРУЙТЕСЬ ПО.

3. У меня нет под рукой таблицы календаря @GordonLinoff

4. Доброе утро @jarlh, не могли бы вы быть более откровенными? Спасибо

5. выбирать… ИЗ бронирований СПРАВА ПРИСОЕДИНЯЙТЕСЬ к календарю в календарной дате между датой начала и датой окончания …

Ответ №1:

Решение:

https://dbfiddle.uk/?rdbms=sqlserver_2019amp;fiddle=c97858b3ddeb079cb27a5c0846a8b884

 create table bookings (booking_id int, stay_date_start date, stay_date_finish date,  number_adults int, number_children int);
insert into bookings values (178458, '2021-09-01', '2021-09-07', 2, 3);
insert into bookings values (178459, '2021-09-03', '2021-09-06', 4, 2);
insert into bookings values (178460, '2021-09-02', '2021-09-10', 3, 1);
insert into bookings values (178461, '2021-09-04', '2021-09-09', 2, 2);
insert into bookings values (178462, '2021-09-01', '2021-09-11', 1, 0);

select * from bookings;

create table cte_dates (day date);
insert into cte_dates values ('2021-09-01');
insert into cte_dates values ('2021-09-02');
insert into cte_dates values ('2021-09-03');
insert into cte_dates values ('2021-09-04');
insert into cte_dates values ('2021-09-05');
insert into cte_dates values ('2021-09-06');
insert into cte_dates values ('2021-09-07');
insert into cte_dates values ('2021-09-08');
insert into cte_dates values ('2021-09-09');
insert into cte_dates values ('2021-09-10');
insert into cte_dates values ('2021-09-11');

select * from cte_dates;

select c.day, sum(number_adults) as 'number_adults', sum(number_children) as 'number_children'
from bookings as b
right join cte_dates as c
on c.day
between b.stay_date_start and b.stay_date_finish
group by c.day;