mysql 将预订表转换为入住表的SQL查询

0s7z1bwu  于 12个月前  发布在  Mysql
关注(0)|答案(2)|浏览(125)

我有一个酒店预订表有三列:到达日期,离开日期和客人数量。我想创建另一个表有两列:日期和在此日期在酒店的总客人。你能帮助我生成查询来完成吗?
这是一个简单的预订表:
| 到达日期|出发日期|客人人数|
| --|--|--|
| 2022-01-01 2022-01-01| 2022-01-02 2022-01-02| 2 |
| 2022-01-02 2022-01-02| 2022-01-03 2022-01-03| 3 |
这是我们需要的表格
| 日期|客人总数|
| --|--|
| 2022-01-01 2022-01-01| 2 |
| 2022-01-02 2022-01-02| 5 |
| 2022-01-03 2022-01-03| 3 |

xuo3flqw

xuo3flqw1#

您可以使用recursive cte来实现这一点。下面只是简单地返回预订的日期。您可以选择添加一个日历表来显示所有日期。这取决于您。

create table reservations (
  id integer, 
  arrival_date date, 
  departure_date date, 
  guest_number integer
  );
  
insert into reservations values 
(1, '2022-01-01', '2022-01-02', 2), 
(2, '2022-01-02', '2022-01-03', 3), 
(3, '2022-01-01', '2022-01-07', 4), 
(4, '2022-01-15', '2022-01-16', 1);

个字符
| 日期|客人总数|
| --|--|
| 2022-01-01 2022-01-01| 6 |
| 2022-01-02 2022-01-02| 9 |
| 2022-01-03 2022-01-03| 7 |
| 2022-01-04 2022-01-04| 4 |
| 2022-01-05 2022-01-05| 4 |
| 2022-01-06 2022-01-06| 4 |
| 2022-01-07 2022-01-07| 4 |
| 2022-01-15 2022-01-15 2022-01-15| 1 |
| 2022-01-16 2022-01-16 2022-01-16| 1 |
View on DB Fiddle

xwbd5t1u

xwbd5t1u2#

如果到达和离开之间总是有一天的差异:

select `date`, sum(guest_number) as total_guest_number
from (
  select arrival_date as `date`, guest_number
  from mytable
  union all
  select departure_date as `date`, guest_number
  from mytable
) as s
group by `date`;

字符串
Demo here

相关问题