我有2张桌子
预订
id roomId checkinDate checkoutDate customerId
间
roomId价格
我想总结一下每天的总金额,但我不知道如何找到并显示checkinDate和checkoutDate之间的差距总和(checkinDate和checkoutDate应该是来自用户的输入,例如checkinDate ='2013 -04-01',checkoutDate ='2013-07-01')。我自己尝试,但我只能从checkinDate做。这就是我所做的:
SELECT DATE(checkinDate), SUM(price)
FROM booking a INNER JOIN room b on a.roomID = b.roomNo
WHERE MONTH(checkinDate) = @month and YEAR(checkinDate) = @year
GROUP BY MONTH(checkinDate), DATE(checkinDate)
所以我得到了这样的结果
DATE(checkinDate) SUM(price)
2013-06-01 3570
2013-06-04 650
但我想要的应该是
DATE(checkinDate) SUM(price)
2013-06-01 3570
2013-06-02 xxxx
2013-06-03 xxxx
2013-06-04 650
即使有一天没有任何收入,也应该显示0。
答案 0 :(得分:0)
一种可能的解决方案是为您创建一个日历表,其中包含您可能感兴趣的每个日期的一行,然后LEFT JOIN
到该表以生成您的报告。您可以在该表中定义各种其他列以帮助满足您的报告要求(例如假日标记和期间指示符)。
Here is one of many 网络帖子,其中包含有关创建此类表格的建议。对“mysql日历表”的网络搜索将揭示许多其他人。
例如,假设您有这样的日历表,您可以运行如下查询:
SELECT cal.calendar_date
, SUM(b.price)
FROM calendar cal
LEFT OUTER JOIN booking a
on a.DATE(checkinDate) = cal.calendar_date
LEFT OUTER JOIN room b
on a.roomID = b.roomNo
WHERE cal.calendar_month = @month
and cal.calendar_year = @year
GROUP BY cal.calendar_date
日历表非常有用。
答案 1 :(得分:0)
根据您提供的数据,这对我来说非常合适,我希望您也这样:
SELECT a.checkinDate, SUM(b.price)
FROM booking AS a LEFT JOIN room AS b on a.roomID = b.roomNo
WHERE a.checkinDate >= '01-04-2012' AND a.checkoutDate <= '01-07-2012'
GROUP BY a.checkinDate;
由于您需要报告预订表中的每个日期,因此必须使用左连接。 注意日期格式,你应该得到结果。
P.S。:来自SQLite 3.3.6的查询