提问人:TexasCarey 提问时间:11/17/2023 最后编辑:Maciej LosTexasCarey 更新时间:11/17/2023 访问量:95
在表/查询/报表中计算从一个月到下一个月的天数
Calculating Days from one month to the next in a table/query/report
问:
我有一个查询,它返回日期跨度中每月的天数,即 , , .查询返回:(忽略数字后面的句点)。Start Date = 6/10/2020
End 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,谁知道每种不同的方法。
答:
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 日。
评论
(Jun + Jul)