【问题标题】:How to get sum of amount for between dates and display disappeared date?如何获取日期之间的金额总和并显示消失日期?
【发布时间】:2013-06-09 14:42:39
【问题描述】:

我有两张桌子

  1. 预订

    id roomId checkinDate checkoutDate customerId

  2. 房间

    roomId 价格

我想总结每天的总金额,但我不知道如何查找和显示 checkinDate 和 checkoutDate 之间的总金额(checkinDate 和 checkoutDate 应该是用户的输入,例如 checkinDate = '2013 -04-01',结帐日期 = '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。

【问题讨论】:

标签: mysql


【解决方案1】:

一种可能的解决方案是为您创建一个日历表,其中包含您可能感兴趣的每个日期的一行,然后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 

日历表真的很有用。

【讨论】:

    【解决方案2】:

    根据您提供的数据,这对我来说非常有效,我希望对您也一样:

    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;
    

    由于您需要 booking 表中的每个日期的报告,因此 left join 是必须的。 注意日期格式,你应该得到结果。

    P.S.:从 SQLite 3.3.6 查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2018-06-24
      • 2020-08-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      相关资源
      最近更新 更多