我有一张预订的桌子。我想统计一下从指定的入住日期和退房日期开始,每天发生了多少预订。例如:如果入住日期是2012年10月6日,退房日期是2012年6月14日,我需要这样的表格
Date Bookings
10-06-2012 1
11-06-2012 1
12-06-2012 2
13-06-2012 4
14-06-2012 3我正在努力让它工作。我可以计算这两个日期之间的预订数量,但不能计算入住日期和退房日期之间的每个日期的预订数量。
发布于 2012-03-08 09:03:42
我不太明白你的问题。下面的查询假设:
对于checkout.
checkout <= 14-06-2012.,
bookings表包含(至少)列date、checkin和checkout.下面是查询:
SELECT date, COUNT(*)
FROM bookings
WHERE checkin >= '2012-06-10' AND checkout <= '2012-06-14'
GROUP BY date发布于 2012-03-08 09:26:21
使用SUM()查找日期范围内的总预订量。
请在下面进行尝试:
SELECT Date,SUM(Bookings)
FROM tablename
WHERE Date between 'startdate' AND 'enddate'
GROUP BY Date发布于 2012-03-08 09:36:18
您首先需要的是一张日期表。现在mysql不是我的强项,所以我会尽可能多地记录我正在做的事情。请更正这些示例。
可以通过检查最后预订日期并将丢失日期添加到日期表中的作业来准备日期表。如果这是您不会接受的,那么其他解决方案是动态创建表,但也有一些危险。据我所知,没有办法创建这样的表,但您可以通过从您的booking表中选择不同的日期并将其与在查询中制作的天数表进行交叉连接来实现实际工作的代理:
((select distinct checkIn from bookings union select distinct checkOut from bookings)
cross join (select 0 union select 1 union select 2 ...))天数列表应该包含签入日期与每个签入日期和结帐日期之间的最大间隔一样多的天数。这是你必须密切关注的事情,或者干脆把清单做得足够大,比如100天。
现在您有了一个日期表,您需要计算与此日期匹配的预订数量。完整的查询将如下所示:
select tableOfDates.date, count(bookings.checkIn) bookings
from
(
(
select distinct dates.date + INTERVAL days.day DAY -- OR HOWEVER you add days in mysql
from
(select distinct checkIn date from bookings union select distinct checkOut from bookings) dates
cross join (select 0 day union select 1 union select 2 union 3 union 4 union 5 union 6 union 7) days
)
) tableOfDates
left join bookings
on tableOfDates.date between bookings.checkIn and bookings.checkOut
where tableOfDates.date between [YOUR DATE RANGE]https://stackoverflow.com/questions/9611485
复制相似问题