2012-02-26 4 views
1

MS Accessでは、先週のレコードのみを表示するようにフィルタリングしようとしています。 私はレコードの日付に基づいて週番号を示す列を持っています。 DatePart("ww",Date(),2,2)-1を基準フィールドに使用すると、現在の週が1でない場合は正常に機能します。前年には機能しません。Ms前週のレコードのみを表示するアクセス

前年に行った場合でも、前週または2週間のレコードのみを表示するにはどうすればよいですか?あなたのターゲットYourDateField範囲は2年から日付を含む場合、データの最新の週のために

答えて

3

、このようなもので始まり...近づい

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

は中断されません。このアプローチのもう1つの利点は、クエリーでYourDateFieldのインデックスを使用できる場合にクエリを使用できることです。その場合、dbエンジンは索引を調べて、どの行が基準に一致しているかを見つけ出し、レコード・ソースのすべての行ではなく一致する行のみを読み取ることができます。 (あなたがYourDateFieldにインデックスを持っていない場合、それは無効だ場合は、インデックスを削除することができます。それが大幅にクエリをスピードアップかどうかを確認するために1を追加します。)

逆に条件DatePart()関数に基づくWHERE使用dbエンジンはクエリのレコードソース内のすべての行を調べます。これは、特にネットワーク接続を介してデータを読み取る必要があるリンクされたテーブルの場合、巨大なテーブルで重要なパフォーマンスのボトルネックになる可能性があります。

:あなたが望むものを誤解しました。前の月曜日に開始した週のために、私はこの条件を使用:

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

このアプローチは、私が最初に提案し何よりも複雑である間ので、クエリを実行しているときに一度だけ、これらの式を評価しますDBエンジンデータソース内のすべての行に対してDatePart()を使用する場合よりも、パフォーマンスの改善が可能です。

+0

これは過去7日間かかりますか?すなわち、今は木曜日であれば、それは最後の木 - 水を与える。私はpropably十分に記述的ではなかった。ごめんなさい。私は現在の日にもかかわらず、前のカレンダーの週から月曜日の行を返すことを目指しています。 – Marko

0

HansUpが私の問題を解決するためのアイデアをくれました。 Between (Date()-7-Weekday(Date(),2)+1) And (Date()-Weekday(Date(),2)+1)を使用すると、前のカレンダーの週がわかります。 Weekday()は、曜日の曜日を返します。日付からの曜日番号(+1)を取り除くと、月曜日が戻されます。

+0

私は、平らな日付フィールドではなく、フィルタリング対象にDateTimeフィールドを使用していることに気付きました。ですから、正しい日付をキャプチャするには '[DateTime] = BETWEEN [開始日]と[終了日] + 1'を使用する必要があります。 – Marko

関連する問題