2013-06-19 106 views
1

我需要查找上一個時間段的日期 - 例如,如果給定月份是1月13日到3月13日,我需要能夠計算出前一時期是10月12日到12月12日。或者如果日期是7月12日到6月13日,我需要提出7月11日至6月12日。因此,基本上在x個月的時間段內,我需要返回另一個x個月的時間段,結束該月在指定的時間段之前。訪問SQL - 給定兩個日期,返回前一個時間段的日期

日期將始終是本月的第一天,因此2012年6月1日或2012年6月1日或1/6/2012取決於您在世界上的位置。

這個SQL查詢工作,但似乎當我其納入左連接的查詢上以後造成問題(見存在的問題:Access 2007 - Left Join to a query returns #Error instead of 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?

回答

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; 

順便問一下,除非我錯了,我相信你打算說「...我需要能夠計算,前期是10月12日12月12日 ...」

+0

謝謝,是的,這是有效的。不幸的是,它不能解決我正在進一步研究的#Error問題,必須找到解決方法,但它應該使其他人更容易計算查詢在我做什麼時做什麼不再對數據庫進行管理。 :) – Wilskt

0

這裏有一點清潔的SQL。它假定StartDate始終是本月的第一個。

這會計算期間長度,並返回以當前期間開始前一天結束的相同長度。

SELECT QueryDates.StartDate, 
     QueryDates.EndDate, 
     Dateadd("m", Datediff("m", [EndDate] + 1, [StartDate]), [StartDate]) AS 
     StartDatePrevious, 
     [StartDate] - 1              AS 
     EndDatePrevious 
FROM QueryDates; 
+0

我可以看到如何工作,但日期將永遠成爲本月的第一個,所以我需要使用某種日期函數從StartDate中減去一個月來查找EndDatePrevious。 – Wilskt

相關問題