Date 有没有一种方法可以计算日期范围内的天数?

Date 有没有一种方法可以计算日期范围内的天数?,date,ms-access,count,days,Date,Ms Access,Count,Days,我是VB/SQL的初学者,我几个月前才开始学习,但是我可以理解算法的逻辑,就像我以前做一些Excel VBA一样 事实上,我正在设计一个数据库,在那里我可以跟踪每一位同事一年中的活动 目标是每月比率=> 计费天数/计费+不计费-缺席 背景: 一个人可以是:内部工作不收费,或外部工作收费,或休假缺席 我有一个[Planning]表,其中存储以下数据:[Consultant_ID]链接到另一个表[Consultant],[Activity]一个包含上述三个选项的列表,[开始日期],[结束日期]。 例

我是VB/SQL的初学者,我几个月前才开始学习,但是我可以理解算法的逻辑,就像我以前做一些Excel VBA一样

事实上,我正在设计一个数据库,在那里我可以跟踪每一位同事一年中的活动

目标是每月比率=> 计费天数/计费+不计费-缺席

背景: 一个人可以是:内部工作不收费,或外部工作收费,或休假缺席

我有一个[Planning]表,其中存储以下数据:[Consultant_ID]链接到另一个表[Consultant],[Activity]一个包含上述三个选项的列表,[开始日期],[结束日期]。 例如: 顾问1:从2019年1月1日至2019年6月1日在外部工作, 从2019年6月2日至2019年12月31日进行内部工作, 2019年3月2日至2019年3月15日的假期

例如,有没有办法计算3月份的可计费比率

我创建了4个查询,可能太多了? 3查询:[顾问ID][活动][开始日期][结束日期][比率:Datediffd;[开始日期];[结束日期]

对于每个查询:[活动条件]:一个在内部工作,一个在外部工作,一个缺席

对于[开始日期]和[结束日期]标准:=[输入结束日期]

第四个查询[顾问ID][可付费][不可付费][缺席],并计划添加[比率]

问题是:Datediff统计其发现的整个活动的日期,而不仅仅是我希望的2019年3月1日至2019年3月31日之间的日期

我预计该比率的输出为:可计费天数/可计费+不可计费-不存在所需期间

实际输出显示输入日期之间整个期间的可计费、不可计费和缺勤天数

所以不是31张账单,0张非账单,15张缺席 它显示180个可计费,0个不可计费,32个不可计费

很抱歉发了这么长的帖子,这其实是我的第一次,非常感谢!
我已经为此挣扎了整整一周了

我们首先需要计算出每行的maxBegin和minEnd日期

 SELECT
       *,
        (IIF (Beginning_Date > #3/1/2019#, Beginning_Date, #3/1/2019#)   ) as maxBegin,
        (IIF (End_Date < #3/31/2019#, End_Date, #3/31/2019#)   ) as minEnd,
        Datediff("d", maxBegin, minEnd) + 1 as theDiff
     FROM Planning
     Where Beginning_Date <= #3/31/2019#  AND End_Date >= #3/1/2019#
然后用它来计算持续时间。注意:DateDiff不计算两端,所以我们需要加+1

SELECT
   Consultant_ID,
   SUM(IIF (Activity = "Working Internally", Datediff("d", maxBegin, minEnd) +1, 0) ) as NonBillable,
   SUM(IIF (Activity = "Working Externally", Datediff("d", maxBegin, minEnd) +1, 0) ) as Billable,
   SUM(IIF (Activity = "Holidays", Datediff("d", maxBegin, minEnd) +1, 0) ) as Absent
FROM
   (
     SELECT
       *,
        (IIF (Beginning_Date > #3/1/2019#, Beginning_Date, #3/1/2019#)   ) as maxBegin,
        (IIF (End_Date < #3/31/2019#, End_Date, #3/31/2019#)   ) as minEnd
     FROM Planning
     Where Beginning_Date <= #3/31/2019#  AND End_Date >= #3/1/2019#
   ) as z

GROUP BY Planning.Consultant_ID;
最后,您需要通过参数将实际的开始/结束日期替换到sql中以运行查询


此外,您可以将比率计算直接添加到此sql中,并且只有一个查询。

非常长且非常广泛的问题。答案可能是。问题是日期条件未被识别?请与我们分享查询1的实际sql,用于内部工作和查询4。否则,我们只是在黑暗中猜测和拍摄可以推荐。@June7,但datediff会占用整个时间,而我只想计算特定月份或周的比率,例如,我刚刚尝试了你的代码,它工作得非常好,只需对与我的数据库相关的一些元素名称进行少量调整。非常感谢你的回答,它非常清楚,即使是b艾金纳喜欢我!