1

我需要找到前一个时间段的日期——例如,如果给定的月份是 Jan-13 到 Mar-13,我需要能够计算出上一个时间段是 Oct-12 到 Dec-12。或者如果日期是 7 月 12 日到 6 月 13 日,我需要得出 7 月 11 日到 6 月 12 日。所以基本上对于 x 个月的时间段,我需要返回另一个 x 个月的时间段来完成该月在指定时间段之前。

日期将始终是每月的第一天,因此 2012 年 6 月 1 日或 2012 年 6 月 1 日或 2012 年 1 月 6 日,具体取决于您在世界的哪个地方。

此 SQL 查询有效,但稍后当我将其合并到 Left Join 查询中时似乎会导致问题(请参阅现有问题:Access 2007 - Left Join to a query returns #Error 而不是 Null

SELECT DATEADD("m",
1-(1+MONTH(QueryDates.EndDate)-MONTH(QueryDates.StartDate)+
    (12*(YEAR(QueryDates.EndDate)-YEAR(QueryDates.StartDate)))),
DATEADD("m",-1,QueryDates.StartDate)) AS StartDatePrevious, 
DATEADD("m",-1,QueryDates.StartDate) AS EndDatePrevious
FROM QueryDates;

从我坐的地方看起来有点疯狂,所以有没有更简单的方法来完成这项任务?或者 SQL 中是否有任何错误可能会在以后混淆 Access?

4

2 回答 2

1

这对你有什么作用?我相信,这与您在查询中所做的相同,但使用 DateDiff 函数使其看起来不那么粗糙。DateDiff 告诉您(例如)2013 年 1 月 1 日和 2013 年 3 月 1 日之间有 2 个月。因此,我们正在查看 3 个月的跨度,因此我们从开始日期和结束日期中减去 3 个月以获得上一个跨度:

SELECT DateAdd("m",DateDiff("m",EndDate,StartDate)-1,StartDate) AS StartDatePrevious
,DateAdd("m",DateDiff("m",EndDate,StartDate)-1,EndDate) AS EndDatePrevious
FROM QueryDates;

顺便说一句,除非我弄错了,否则我相信您的意思是“……我需要能够计算出上一期间是Oct-12Dec-12 ……”

于 2013-06-19T18:10:05.877 回答
0

这是一个更简洁的 SQL。它假定 StartDate 始终是每月的第一天。

这将计算周期长度,并返回在当前周期开始前一天结束的相同长度。

SELECT QueryDates.StartDate, 
       QueryDates.EndDate, 
       Dateadd("m", Datediff("m", [EndDate] + 1, [StartDate]), [StartDate]) AS 
       StartDatePrevious, 
       [StartDate] - 1                                                      AS 
       EndDatePrevious 
FROM   QueryDates; 
于 2013-06-19T18:05:40.667 回答