2016-07-20 3 views
0

Я использую следующее предложение WHERE, чтобы загружать записи только за последний финансовый год плюс год к настоящему времени.T-SQL Динамический диапазон дат в предложении WHERE (последний финансовый год + год к настоящему времени)

Выполняется без WHERE clause, для записей 1 мили требуется 30 секунд. С предложением WHERE мне пришлось остановить его через 2 часа.

Можете ли вы поделиться своими мыслями

WHERE 
    ([schema].[table].[DATE] >= DATEADD 
     (yy, - 1, DATEADD 
      (MONTH,(MONTH(GETDATE()) - 1)/6 * 12 - 6, 
      CAST(CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME) 
      ) 
     ) 
    ) 
+1

Положить расчет в переменную и сравнить дату с этим. то есть 'declare @d datetime = DATEADD (yy, - 1, DATEADD (MONTH, (MONTH (GETDATE()) - 1)/6 * 12 - 6, CAST (CAST (GETDATE()) AS VARCHAR) AS DATETIME) ) '...' WHERE ([схема]. [Таблица]. [DATE]> = @ d' – artm

+0

Несмотря на то, что это не решило мою проблему, я сделал это изменение в любом случае. Спасибо – Jim

+0

что вы имеете в виду «год на сегодняшний день»? Это последний FY до текущей даты? Итак, если ваш FY начался в OCT 1, это будет OCT1 2014 - СЕГОДНЯ? – scsimon

ответ

0
Declare @PastFiscalYear Date 

    Set @PastFiscalYear= DATEADD(yy, - 1, DATEADD(MONTH,(MONTH(GETDATE()) - 1)/6 * 12 - 6,CAST(CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME))) 

    WHERE 
     ([schema].[table].[DATE] >= @PastFiscalYear) 

Вы можете попробовать это

+0

: Чтобы отформатировать, выделите код и нажмите на образец кода – TheGameiswar

+0

К сожалению, это не имеет большого значения. Спасибо за предложение. Я буду смотреть на индексы завтра. – Jim

0

Это вернет данные с предыдущего финансового года даты начала. Просто измените -3 на то, что когда-либо ваше смещение FY. -3 - на октябрь.

[schema].[table].[DATE] >= DATEADD(mm,-3,DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(YEAR, -1, GETDATE())), 0))