MS Access:按开始日期和结束日期之间每个月的月份分组

Posted

技术标签:

【中文标题】MS Access:按开始日期和结束日期之间每个月的月份分组【英文标题】:MS Access: Group by months for each month between Start Date and End Date 【发布时间】: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 我需要所有的月份。 【参考方案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/… 它可以节省您必须遍历行或循环数月。基本上它就像你想要执行的每次迭代都有一行,允许你将它作为一个集合操作来处理

以上是关于MS Access:按开始日期和结束日期之间每个月的月份分组的主要内容,如果未能解决你的问题,请参考以下文章

开始日期和结束日期之间每个项目的 MS SQL Server QUERY SUM

查询不使用 MS-Access 中的日期条件进行拉取

MS Access 按日期累积总和?

MS ACCESS 中的 VBA 调度算法

查找每个员工的项目开始日期和结束日期(即开始日期和结束日期应该是连续的,在天/月/年中没有任何中断)

需要在具有开始和结束日期的选定日期之间按天计算活跃客户列表(也为空)