2012-02-26 61 views
1

在MS Access中,我試圖過濾只顯示前一週的記錄。 我有colums顯示weeknumber根據記錄日期。 如果當前星期不是1,則在條件字段中使用DatePart("ww",Date(),2,2)-1效果不錯。它不適用於上一年。女士訪問只顯示前一週的記錄

即使前一年我只能顯示上週或2周內的記錄嗎?

回答

3

對於最新數據的一週,開始這樣的事情......當你的目標YourDateField範圍包括由2年日期

YourDateField Between (Date() -7) AND Date() 

這種做法不會打破。該方法的另一個優點是查詢可以使用YourDateField上的索引(如果有的話)。在這種情況下,數據庫引擎可以檢查索引以查找哪些行符合您的條件,並只讀取匹配的行而不是記錄源中的所有行。

相反使用WHERE條件基礎上,DatePart()功能(如果你沒有對YourDateField索引,添加一個,看它是否顯著加快了疑問。您可以刪除索引,如果它是無效的。)將強制數據庫引擎檢查查詢的記錄源中的每一行。這可能是一個性能瓶頸,對於巨大的表格來說可能很重要,特別是如果它是一個需要通過網絡連接讀取數據的鏈接表。

編輯:我誤解了你的意思。對於其開始在上週一的一週,我用這個條件:

Between Date() - (6 + Weekday(Date(), 2)) 
    AND Date() - Weekday(Date(), 2) 

的數據庫引擎將只一次運行查詢的時候,因此,雖然這種方法比我首先提出更復雜的評估這些表達式與數據源中的每行使用DatePart()相比,它仍然可以提供潛在的性能改進。

+0

這會給過去7天。即如果現在是星期四,它會給上一個星期四 - 星期三。我可以說沒有足夠的描述性。抱歉。儘管目前我們的生活日期不盡相同,但我的目標是回到上一個日曆周的Mon-Sun行。 – Marko 2012-02-27 09:22:41

0

HansUp給了我一個解決我的問題的想法。 使用Between (Date()-7-Weekday(Date(),2)+1) And (Date()-Weekday(Date(),2)+1),應該給我以前的日曆周。 Weekday()返回一週的日數。從日期中抽取週日數(+1)應該返回一週的星期一。

+0

我意識到我使用DateTime字段來過濾目標,而不是普通的Date字段。所以,我必須使用'[DateTime] = BETWEEN [開始日期]和[結束日期] + 1'來捕獲正確的日期。 – Marko 2012-02-28 09:01:33