Для самой последней недели данных начните с чего-то вроде этого ...
YourDateField Between (Date() -7) AND Date()
Этот подход не будет нарушен, если целевой диапазон YourDateField включает даты от 2 лет. Еще одним преимуществом этого подхода является то, что запрос может использовать индекс для YourDateField , если он у вас есть. В этом случае механизм БД может проверить индекс, чтобы найти, какие строки соответствуют вашему критерию, и прочитать только совпадающие строки вместо всех строк в источнике записи. (Если у вас нет индекса на YourDateField , добавьте его, чтобы увидеть, значительно ли он ускоряет запрос. Вы можете удалить индекс, если он неэффективен.)
И наоборот, использование условия WHERE на основе функции DatePart()
заставит механизм БД проверять каждую строку в источнике записей запроса. Это может быть узким местом в производительности, которое может быть значительным для огромной таблицы, особенно если это связанная таблица, которая требует чтения данных через сетевое соединение.
Редактировать : Я неправильно понял, что вы хотели. Для недели, которая началась в предыдущий понедельник, я использовал это условие:
Between Date() - ( 6 + Weekday(Date(), 2))
AND Date() - Weekday(Date(), 2)
Механизм БД будет оценивать эти выражения только один раз при выполнении запроса, поэтому, хотя этот подход более сложен, чем я предлагал, он все же может предложить потенциальное повышение производительности по сравнению с использованием DatePart()
для каждой строки в данных источник.