我有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。
最佳答案
一种可能的解决方案是为您创建一个日历表,在每个日历中您可能会对感兴趣的每个日期都有一行,然后在该表中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
日历表确实非常有用。