2016-07-20 30 views
0

Ich verwende die folgende WHERE-Klausel, um nur Datensätze aus dem letzten Geschäftsjahr plus ein Jahr nach Datum zu laden.T-SQL Dynamischer Datumsbereich in der WHERE-Klausel (Letztes Geschäftsjahr + Jahr bis Datum)

Ohne WHERE clause läuft es 30 Sekunden für 1mil Datensätze. Mit der WHERE-Klausel musste ich nach 2 Stunden aufhören.

Können Sie bitte Ihre Gedanken

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

Setzen Sie die Berechnung in eine Variable und vergleichen Sie das Datum mit diesem. zB 'declare @d datetime = DATEADD (JJ, - 1, DATEADD (MONAT (MONTH (GETDATE()) - 1)/6 * 12 - 6, CAST (CAST (JAHR (GETDATE()) AS VARCHAR (AS DATETIME) ) '...' WHERE ([Schema]. [Tabelle]. [DATUM]> = @ d' – artm

+0

Obwohl das mein Problem nicht gelöst hat, habe ich diese Änderung trotzdem vorgenommen. Danke – Jim

+0

was meinst du auf "ein Jahr bis heute"? Ist das letzte Jahr auf das aktuelle Datum? Also, wenn Ihr FJ am 1. Oktober begann, wäre es 1. Oktober 2014 - heute? – scsimon

Antwort

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) 

Können Sie diese

versuchen teilen
+0

: Zum Formatieren markieren Sie den Code und klicken Sie auf Codebeispiel – TheGameiswar

+0

Leider macht das keinen großen Unterschied, danke für den Vorschlag, ich schaue mir die Indizes morgen an. – Jim

0

Dies wird seit dem letzten Datum Geschäftsjahr Startdaten bringen. Ändern Sie einfach die -3, was auch immer Ihr FY-Offset ist. -3 ist für Oktober.

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