2015-04-13 2 views
1

Я пытаюсь получить данные за 13 недель, но не знаю, как это сделать правильно.Роллинг 13 недель в Microsoft sql

Я попытался это:

DATEDIFF(week,Completed_date,GETDATE()) < 13 

Но я получаю 14 недель вместо 13, и я думаю, что это могло бы заставить меня неправильные результаты, как она идет 91 дней назад, чтобы он не мог добраться до начала недели. .

+2

Он основан на '@@ Datefirst' смотрите в это: https://msdn.microsoft.com/en-gb/library/ms187766.aspx – Milen

+1

Если это в ИНЕКЕ обычно лучше с точки зрения производительности использовать что-то вроде CompletedDate> = dateadd ... так, чтобы индексы могли использоваться. –

+0

мой запрос действительно получает правильный номер, но он делает это в течение 14 месяцев. Теперь проблема была в этом. – ARAS0712

ответ

0

DATEDIFF с неделями использует календарные недели. Вы можете использовать день, если вы ожидаете, что это будет заданное количество дней, скользящих, а не привязанных к календарным неделям. Кроме того, убедитесь, что вы учитываете время суток, если используете GETDATE().

В этой статье ниже, может помочь вам, как хорошо, особенно замечание,

Указание SET DATEFIRST не оказывает никакого влияния на DATEDIFF. DATEDIFF всегда использует воскресенье как первый день недели, чтобы гарантировать, что функция детерминирована.

https://msdn.microsoft.com/en-us/library/ms189794.aspx

+0

Я ожидаю, что это будет считать записи, обрабатываемые каждую неделю за последние 13 недель, включая текущий. – ARAS0712

Смежные вопросы