【问题标题】:MS Access: Group by months for each month between Start Date and End DateMS Access:按开始日期和结束日期之间每个月的月份分组
【发布时间】:2013-09-25 06:20:36
【问题描述】:

我在 MS Access 中有这四个数据字段 - ID、SubscriptionStartDate、SubscriptionEndDate 和 MonthlyCost。订阅开始和结束日期将涵盖多个月甚至几年,我想为所有 ID 的开始日期和结束日期之间的每个月计算 MonthlyCost。

在 Access 中使用 SQL,我正在寻找如下输出:

月 TotalMonthlyCost

Jan-13 100000 -> Jan-13 的每月总费用,所有 ID 的总和。

2 月 13 日 150000 -> 2 月 13 日的每月总费用,所有 ID 的总和。 ...

【问题讨论】:

  • 您是在查找要通过一次查询还是每月一次查询报告的所有月份?
  • @gordatron 我需要所有的月份。

标签: sql ms-access sql-date-functions


【解决方案1】:

我认为你可以这样做:

select
    m.month
    ,sum(d.MonthlyCost)
from
    months as m
    inner join data as d
        on d.SubscriptionStartDate < m.endDate
        and d.SubscriptionEndDate > m.start
group by
    m.month

您需要创建如下所示的“months”表

   month   |    start   |   end
 'jan-13'  | 01/01/2013 | 31/01/2013
 'feb-13'  | 01/02/2013 | 28/02/2013
 'mar-13'  | 01/03/2013 | 31/03/2013

但这就是说,如果您在那个月(即使是一天),那么您应该添加每月订阅。对吗?

注意:我在这里没有访问权限,我不记得我的语法是否适合访问。 (我认为您需要在联接子句中使用方括号之类的东西)

【讨论】:

  • 是的,即使结束日期是 2 月 2 日,我们也会按整月 [Evil Grin] 收费。抱歉,没有名为“月份”的数据字段,我们必须创建它吗?数据只有四个字段 - ID、startDt、endDt 和 Cost。
  • 您必须创建一个完整的其他表,其中包含所有月份..或者至少您有兴趣为其计费的所有月份。您的计费流程的开始可以在代码中计算月份表中缺少哪些月份。或者您可以添加所有行以延长您的应用程序的寿命。
  • 我猜它是一种数字表?.. 还是类似的 dba.stackexchange.com/questions/11506/… 它可以节省您必须遍历行或循环数月。基本上它就像你想要执行的每次迭代都有一行,允许你将它作为一个集合操作来处理
猜你喜欢
  • 2020-12-17
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多