Ms Access, чтобы показать только записи предыдущей недели - PullRequest
1 голос
/ 26 февраля 2012

В MS Access я пытаюсь отфильтровать, чтобы показывать только записи с предыдущей недели. У меня есть столбцы, показывающие номер недели по дате записи. Использование DatePart("ww",Date(),2,2)-1 в поле критериев хорошо работает, если текущая неделя не равна 1. Это не работает с предыдущим годом.

Как я могу показать только записи с предыдущей недели или 2 недель, даже если это относится к предыдущему году?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Для самой последней недели данных начните с чего-то вроде этого ...

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

Этот подход не будет нарушен, если целевой диапазон YourDateField включает даты от 2 лет. Еще одним преимуществом этого подхода является то, что запрос может использовать индекс для YourDateField , если он у вас есть. В этом случае механизм БД может проверить индекс, чтобы найти, какие строки соответствуют вашему критерию, и прочитать только совпадающие строки вместо всех строк в источнике записи. (Если у вас нет индекса на YourDateField , добавьте его, чтобы увидеть, значительно ли он ускоряет запрос. Вы можете удалить индекс, если он неэффективен.)

И наоборот, использование условия WHERE на основе функции DatePart() заставит механизм БД проверять каждую строку в источнике записей запроса. Это может быть узким местом в производительности, которое может быть значительным для огромной таблицы, особенно если это связанная таблица, которая требует чтения данных через сетевое соединение.

Редактировать : Я неправильно понял, что вы хотели. Для недели, которая началась в предыдущий понедельник, я использовал это условие:

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

Механизм БД будет оценивать эти выражения только один раз при выполнении запроса, поэтому, хотя этот подход более сложен, чем я предлагал, он все же может предложить потенциальное повышение производительности по сравнению с использованием DatePart() для каждой строки в данных источник.

0 голосов
/ 27 февраля 2012

HansUp дал мне идею решить мою проблему.Использование Between (Date()-7-Weekday(Date(),2)+1) And (Date()-Weekday(Date(),2)+1), должно дать мне предыдущую календарную неделю.Weekday () возвращает номер дня недели.Вычитание номера дня недели (+1) из даты должно возвращать понедельник недели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...