您好我在Microsoft SQL Server中有一个数据库,其中包含与酒店/别墅预订系统相关的表格,需要帮助创建一些查询以获取相关数据:
能够找到在特定日期退房的客人名单,按别墅类型分组并提供当天的总数(即计数)。
对于该查询,我认为我必须使用2个相关的表来预订和预订表:
create table guest_reservation(confirm_no int,
agent_id int,
g_name varchar (30),
g_phone varchar (10));
create table reservation(
confirm_no int,
credit_card_no char (16),
res_checkin_date datetime,
res_checkout_date datetime,
default_villa_type char (1),
price_plan char (1));
I thought using a query like this would help, but it didn't seem to:
SELECT g_name, villa_type, COUNT(*)
FROM guest_reservation, reservation
WHERE guest_reservation.confirm_no = reservation.confirm_no
AND res_checkout_date = ‘insert date for when you would want to check out here’
GROUP BY villa_type;
思想/帮助?
编辑:我想我想出了第一个问题......我想要帮助的另一个问题是,如果客人想要某种类型的房间,那么如果这种类型的房间在他们希望保留的日期可用。
我只使用了预订表,但我不确定这是否会做我想要的,这就是我现在所拥有的:
Select villa_type from reservation
where res_check_in_date not between '2011-10-08' and '2011-10-09'
and res_check_out_date not between '2011-10-08' and '2011-10-09'
答案 0 :(得分:0)
由于时间跨度的性质,您可能会发现创建一个日历表只是日历中的静态日期列表是有帮助的,也可能是必要的。这些几乎总是在用于数据分析的BI项目中创建。
此对象允许您执行的操作是从您的预订表加入日历表,为您提供包含时间跨度的独特日期列表。这是一个代码示例:
inner join calendar
on calendar.date between reservation.res_checkin_date and reservation.res_checkout_date
例如,如果我今天(4/12)办理登机手续并于周四(4/14)退房,则加入日历表将产生3个不同的行,每个行为4/12,4/13 ,4/14。在检查可用性方面,这是一个更清晰的图像,表明谁在什么时候占据什么。
此外,您可能需要注意一些代码细微差别,例如使用DATE而不是DATETIME,以消除产生意外结果的可能性。如果您需要完整的DATETIME类型,则可以使用efficiently query the DATE in a DATETIME。