Ich versuche, eine gespeicherte Prozedur zu schreiben, die nur Daten für die letzten 3, 6, 9 Monate oder Jahr zurückgibt. Es muss nur ganze Monate sein (wenn man 8/15 zieht; das letzte wäre Juli)SQL-Parameter, der Filtereinträge innerhalb der letzten 3, 6, 9 Monate oder Jahre überprüft
Bis jetzt konnte ich herausfinden, wie man den ersten und letzten Tag des vorherigen Monats herausfinden kann.
SELECT DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0))as 'First day of the month',
DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) as 'Last day of the month'
Das Feld, das für überprüft werden müssen, ist TransactionDateKey (dh 20.161.222). Ich denke, ich sollte ein CAST auf diesem Feld verwenden, um nur nach Monat und Tag zu suchen (zB 201612), aber ich könnte falsch liegen. Im Folgenden finden Sie eine grobe Mock-up von dem, was ich denke, sollte ich meine Frage auf, aber ohne die hartcodierte Daten
select FirstName + ' ' + LastName as 'Specialist',
empID as 'empID',
count(fact.spKey) as 'Count',
CAST(LEFT(CAST(TransactionDateKey AS VARCHAR(100)), 6) AS INT) as 'Month'
from Final.DimSpecialist s
inner join Final.FactTreatmentDay fact
on fact.spKey = s.spKey
where TransactionDateKey between 20161201 and 20161231
group by FirstName + ' ' + LastName,
empID,
CAST(LEFT(CAST(TransactionDateKey AS VARCHAR(100)), 6) AS INT)
Wie würde ich über die Vereinbarkeit eines einzelnen Parameters, @MonthRange gehen werden zu stützen, und es in der Verwendung WHERE-Klausel nur Daten für die letzten 3 Monate, 6 Monate, 9 Monate oder ein Jahr zurückgeben? Ich denke, der Parameter muss platziert werden, wo -1 am ersten Tag des Monats ist. Ich denke, es sollte auch eine Case-Anweisung geben, um nach jedem der 4 möglichen Parameterwerte zu suchen, aber ich bin mir nicht sicher, wohin es gehen soll. Jeder Rat würde sehr geschätzt werden.