我有一个属性表的预订,架构是:
property_id, start_date, end_date
这里有一个属性ID列表(在另一个表中引用)以及每个属性的每个预订的start_date和end_date。
我想要解决的是一个查询,它会显示在接下来的28天内可以停留7天的所有属性(DISTINCT)。
我无法弄清楚我将如何开始构建此查询。
答案 0 :(得分:1)
您需要进行交叉连接(将表连接到自身)并将一条记录的完成日期与同一属性的另一条记录的开始日期进行比较。
快速取样让您入门(错过28天内的情况并且无法保证在每种情况下均可使用):
create table bookings(id int, start datetime, finish datetime);
insert into bookings values (1, '2015-05-18','2015-05-23');
insert into bookings values (1, '2015-05-25','2015-06-01');
insert into bookings values (2, '2015-05-18','2015-05-29');
insert into bookings values (2, '2015-06-15','2015-06-21');
select distinct a.id
from bookings a cross join bookings b
where
a.id = b.id and a.start != b.start and datediff(a.start,b.finish) >= 7;