有没有办法计算日期范围内的天数?
Is there a way to count days INSIDE a range of dates?
我是VB/SQL的新手,我几个月前才开始学习,但我能理解算法的逻辑,因为我以前做过一些Excel VBA.
实际上我正在设计一个数据库,我可以(希望)在这一年中跟进每位同事的 activity。
objective 的(每月)比率为 =>
计费天数 /(可计费 + 不可计费 - 缺席)
上下文:
一个人可以是:在内部工作(不计费),或在外部工作(计费),或在假期(缺席)。
- 我有一个 [Planning] Table,它存储以下数据:[Consultant_ID](链接到另一个 table [顾问],[Activity] (包含上述三个选项的列表),[Beginning_Date], [End_Date].
示例:
顾问 1:从 01/01/2019 到 01/06/2019 在外部工作,
从 02/06/2019 到 31/12/2019 在内部工作,
假期从 02/03/2019 到 15/03/2019
有没有办法获得例如 3 月份的可计费比率?
我创建了 4 个查询(也许太多了?)
3 个查询:[Consultant_ID] [Activity] [Beginning_Date] [End_Date] [比率:Datediff("d";[Beginning_Date]; [End_Date]).
对于每个查询:[Activity 标准]:一个在内部工作,一个在外部工作,一个缺席。
对于 [Beginning_Date] 和 [End_Date] 条件:<=[输入开始日期],>=[输入结束日期]
第 4 个查询 [Consultant ID] [Billable] [Non billable] [Absent](并计划添加 [RATIO])。
问题是:Datediff 会计算它找到的整个 activity 的日期,而不仅仅是我希望的 01/03/2019 和 31/03/2019 之间的日期。
我希望比率的输出为:所需期间的可计费天数/(可计费 + 不可计费 - 缺席)。
实际输出显示输入日期之间整个期间的可计费、不可计费和缺席天数
所以不是 31 位可收费,0 位不可收费,15 位缺席
它显示 180 人可计费,0 人不可计费,32 人缺席
抱歉这么久了post,这是我的第一次,非常感谢!
我已经为此苦苦挣扎了整整一个星期
我们首先需要计算出每行的 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;
最后,您需要通过参数将实际的 Begin/End 日期替换为 sql 到 运行 您的查询。另请注意,假期只有 14 天,而不是 15 天。
此外,您可以将比率计算直接添加到此 sql,并且只有一个查询。
我是VB/SQL的新手,我几个月前才开始学习,但我能理解算法的逻辑,因为我以前做过一些Excel VBA.
实际上我正在设计一个数据库,我可以(希望)在这一年中跟进每位同事的 activity。
objective 的(每月)比率为 => 计费天数 /(可计费 + 不可计费 - 缺席)
上下文: 一个人可以是:在内部工作(不计费),或在外部工作(计费),或在假期(缺席)。
- 我有一个 [Planning] Table,它存储以下数据:[Consultant_ID](链接到另一个 table [顾问],[Activity] (包含上述三个选项的列表),[Beginning_Date], [End_Date].
示例: 顾问 1:从 01/01/2019 到 01/06/2019 在外部工作, 从 02/06/2019 到 31/12/2019 在内部工作, 假期从 02/03/2019 到 15/03/2019
有没有办法获得例如 3 月份的可计费比率?
我创建了 4 个查询(也许太多了?) 3 个查询:[Consultant_ID] [Activity] [Beginning_Date] [End_Date] [比率:Datediff("d";[Beginning_Date]; [End_Date]).
对于每个查询:[Activity 标准]:一个在内部工作,一个在外部工作,一个缺席。
对于 [Beginning_Date] 和 [End_Date] 条件:<=[输入开始日期],>=[输入结束日期]
第 4 个查询 [Consultant ID] [Billable] [Non billable] [Absent](并计划添加 [RATIO])。
问题是:Datediff 会计算它找到的整个 activity 的日期,而不仅仅是我希望的 01/03/2019 和 31/03/2019 之间的日期。
我希望比率的输出为:所需期间的可计费天数/(可计费 + 不可计费 - 缺席)。
实际输出显示输入日期之间整个期间的可计费、不可计费和缺席天数
所以不是 31 位可收费,0 位不可收费,15 位缺席 它显示 180 人可计费,0 人不可计费,32 人缺席
抱歉这么久了post,这是我的第一次,非常感谢! 我已经为此苦苦挣扎了整整一个星期
我们首先需要计算出每行的 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;
最后,您需要通过参数将实际的 Begin/End 日期替换为 sql 到 运行 您的查询。另请注意,假期只有 14 天,而不是 15 天。
此外,您可以将比率计算直接添加到此 sql,并且只有一个查询。