SQL Server Выберите последние 4 недели и тот же период только в прошлом году - PullRequest
9 голосов
/ 05 июля 2011

Я попытался найти soln для этого, но не смог найти его.

Мне нужно выбрать данные за последние 4 недели с текущей даты, что не является проблемой, так как я просто делаюdate >= Dateadd(mm, -1, getdate()).Однако я также хочу те же 4 недели данных за предыдущий год.Но я не хочу (например) 1-30 июня 2010 года и 1-30 июня 2011 года, мне понадобится

30 июня 2011 года (четверг) 2011 года и за 4 недели до И 1 июля и за четыре недели до того, как 1 июля былочетверг той же недели, что и в предыдущем году.

, поэтому будут возвращены данные за 8 недель.

Спасибо за помощь!

Ответы [ 2 ]

15 голосов
/ 05 июля 2011

Вы можете использовать еще DATEADD() доброту, чтобы вернуться к предыдущему году:

where theDate >= DATEADD(mm, -1, GETDATE())    
OR
    (theDate <= DATEADD(week,-52,convert(datetime,GETDATE()))
     and
     theDate >= DATEADD(mm,-1,DATEADD(week,-52,convert(datetime,GETDATE()))))

Вычитая 52 недели с 30.06.2011, вы возвращаетесь с 01.07.2010 по вашему запросу ...Затем, используя исходное вычитание от 1 месяца для нижней границы.

Вы также можете переключить все это на недели ...

where theDate >= DATEADD(week, -4, GETDATE())    
OR
    (theDate <= DATEADD(week,-52,convert(datetime,GETDATE()))
     and
     theDate >= DATEADD(week,-56,convert(datetime,GETDATE())))
0 голосов
/ 05 июля 2011

вы можете сделать серию ORed МЕЖДУ условиями:

select
  ...
from
  ...
where
  1=1
  or date between Dateadd(mm, -2, getdate()) and Dateadd(mm, -1, getdate())
  or date between Dateadd(mm, -11, getdate()) and Dateadd(mm, -10, getdate())
order by
  date

я правильно понял?

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