我正在尝试编写一个仅返回过去 3、6、9 个月或一年的数据的存储过程。它只需要整整几个月(如果拉 8/15;最近的是 7 月)
到目前为止,我已经能够找出如何找出上个月的第一天和最后一天。
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'
需要检查的字段是 TransactionDateKey(即 20161222)。我认为我应该在该字段上使用 CAST 来仅检查月份和日期(即 201612),但我可能是错的。下面是我认为我应该根据我的查询但没有硬编码日期的粗略模型
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)
我将如何声明一个参数 @MonthRange,并在 WHERE 子句中使用它来仅返回过去 3 个月、6 个月、9 个月或一年的数据?我认为该参数需要放置在“每月第一天”中 -1 的位置。我认为还应该有一个 case 语句来检查 4 个可能的参数值中的每一个,但我不确定它应该去哪里。任何建议将不胜感激。