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