在表/查询/报表中计算从一个月到下一个月的天数

Calculating Days from one month to the next in a table/query/report

提问人:TexasCarey 提问时间:11/17/2023 最后编辑:Maciej LosTexasCarey 更新时间:11/17/2023 访问量:95

问:

我有一个查询,它返回日期跨度中每月的天数,即 , , .查询返回:(忽略数字后面的句点)。Start Date = 6/10/2020End Date = 10/28/2025

Years.    Jan.  Feb.  Mar.  Apr.  May.  Jun.  Jul.  Aug.  Sep.  Oct.  Nov.  Dec.  
2020.                                    20.   31.   31.   30.   31.   30.   31
2021.      31.   28.   31.   30.   31.   30.   31.   31.   30.   31.   30.   31
2022.      31.   28.   31.   30.   31.   30.   31.   31.   30.   31.   30.   31.  
2023.      31.   28.   31.   30.   31.   30.   31.   31.   30.   31.   30.   31.  
2024.      31.   28.   31.   30.   31.   30.   31.   31.   30.   31.   30.   31.  
2025.      31.   28.   31.   30.   31.   30.   31.   31.   30.   28.  

我正在寻找一种方法来计算整个记录集的 2020 年 6 月与 2020 年 7 月以及 2020 年 7 月与 2020 年 8 月的总和,依此类推。因此,2020 年 7 月应 = 51,2020 年 8 月应 = 82,依此类推。

有什么建议吗?

我尝试过 Next、Last、First,谁知道每种不同的方法。

SQL VBA MS-ACCESS

评论

0赞 Shahram Alemzadeh 11/17/2023
如果将原始查询添加到帖子中,则可能更容易在原始查询中实现。
0赞 Jiji 11/17/2023
如果您添加示例数据,那么我们将更容易理解。最小可重复示例
0赞 TexasCarey 11/17/2023
这是使用的交叉表查询。TRANSFORM Count(qryYearMonthDatePart.Month) AS CountOfMonth SELECT qryYearMonthDatePart.Years, Sum(qryYearMonthDatePart.Month) AS [Total Of Month] FROM qryYearMonthDatePart GROUP BY qryYearMonthDatePart.Years PIVOT Format([WhatDate],“mmm”) In (“Jan”,“Feb”,“Mar”,“Apr”,“May”,“Jun”,“Jul”,“Aug”,“Sep”,“Oct”,“Nov”,“Dec”);
0赞 TexasCarey 11/17/2023
StartDate 和 End Date 通过交叉表查询传递,如下所示:SELECT tblSentence.Sentence_ID, tblSentence.Date_Sentenced, tblSentence.Date_Committed, tblSentence.Total_Prior_Time, tbl20YearGCT.Good_Conduct_Time, tbl20YearGCT.Full_Term_Days, tbl20YearGCT.FSA_Projected, tbl20YearGCT.GCT_Days FROM tbl20YearGCT RIGHT JOIN tblSentence ON tbl20YearGCT.Sentence_Months = tblSentence.Sentence_ID;
0赞 Jiji 11/17/2023
所以,如果这只是一个普通的求和,那么对你不起作用吗?(Jun + Jul)

答:

1赞 June7 11/17/2023 #1

运行和查询可用作 CROSSTAB 的源。给定数据,例如:

编号 EffDate(英语:EffDate)
1 10/4/2021
2 11/15/2021
3 12/22/2022
4 1/8/2022
5 2/11/2022
6 3/28/2022
7 4/9/2022
8 5/2/2022
9 6/30/2022
10 7/12/2022
11 8/31/2022
12 9/2/2022

Query1:
示例计算每个月的天数,并将其用于运行总和。调整以处理筛选的数据集和计算月份天数的方法。

SELECT ID, Year(EffDate) AS Yr, Format(EffDate,"mmm") AS Mo, (
    SELECT Sum(Day(DateSerial(Year(EffDate), Month(EffDate) +1,0))) 
    FROM Dates AS Dupe WHERE Dupe.ID<=Dates.ID) AS RunDays
FROM Dates;

查询 2:

TRANSFORM Max(RunDays) AS MaxOfRunDays
SELECT Yr
FROM Query1
GROUP BY Yr
PIVOT Mo In ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
1月 2月 三月 四月 五月 六月 七月 八月 九月 10月 11 月 12 月
2021 31 61 92
2022 123 151 182 212 243 273 304 335 365

附录
在进一步审查时,我发现可以在没有相关子查询的情况下做到这一点。

查询 1:

SELECT ID, EffDate, Year(EffDate) AS Yr, Format(EffDate,"mmm") AS Mo, 
DateSerial(Year(EffDate), Month(EffDate),1) AS BOM, 
DateSerial(Year(EffDate),Month(EffDate)+1,0) AS EOM, 
(SELECT Min(EffDate) FROM Dates WHERE EffDate Between #11/11/2021# And #7/15/2022#) AS FirstDay, 
IIf(EOM Between #11/11/2021# And #7/15/2022#,EOM,EffDate) AS LastDay, 
LastDay-IIf(BOM BETWEEN #11/11/2021# AND #7/15/2022#,BOM,EffDate)+1 AS Days, 
[LastDay]-[FirstDay]+1 AS RunDays
FROM Dates
WHERE EffDate Between #11/11/2021# And #7/15/2022#;

查询 2:
与上面相同的 CROSSTAB

1月 2月 三月 四月 五月 六月 七月 八月 九月 10月 11 月 12 月
2021 16 47
2022 78 106 137 167 198 228 240

评论

0赞 TexasCarey 11/17/2023
我会试试这个......请尽快回复您。
0赞 TexasCarey 11/19/2023
我使用了查询 1 的版本 2: SELECT Dates.EffDate, Year(EffDate) AS Yr, Format(EffDate,“mmm”) AS Mo, DateSerial(Year(EffDate),Month(EffDate),1) AS BOM, DateSerial(Year(EffDate),Month(EffDate)+1,0) AS EOM, (SELECT Min(EffDate) FROM Dates WHERE EffDate Between #1/15/2024# and #7/15/2026#) AS FirstDay, IIf(EOM between #1/15/2024# and #7/15/2026#,EOM,EffDate) AS LastDay, LastDay-IIf(BOM 介于 #1/15/2024# 和 #7/15/2026# 之间,BOM,EffDate)+1 AS 天,[LastDay]-[FirstDay]+1 AS 运行日,FROM 日期 WHERE (((Dates.EffDate) 介于 #1/15/2024# 和 #7/15/2026# 之间));
0赞 TexasCarey 11/19/2023
但是,我返回的结果没有给出 2024 年 1 月的结果,也没有给出 7 月 26 日的结果。2024 年 1 月和 2026 年 7 月为空白。我正在使用查询 2 来获取上面列出的查询 1 中的数据。
0赞 June7 11/19/2023
对我有用。2024 年 1 月和 2026 年 7 月的 EffDate 值是多少?它们是否在日期范围内?
0赞 TexasCarey 11/19/2023
我的临时表格的日期为 2024 年 1 月 1 日和 2026 年 8 月 31 日。