我有一个问题:
;with date_cte as(
SELECT r.starburst_dept_name,r.monthly_past_date as PrevDate,x.monthly_past_date as CurrDate,r.starburst_dept_average - x.starburst_dept_average as Average
FROM
(
SELECT *,ROW_NUMBER() OVER(PARTITION BY starburst_dept_name ORDER BY monthly_past_date) AS rowid
FROM intranet.dbo.cse_reports_month
) r
JOIN
(
SELECT *,ROW_NUMBER() OVER(PARTITION BY starburst_dept_name ORDER BY monthly_past_date) AS rowid
FROM intranet.dbo.cse_reports_month
Where month(monthly_past_date) > month(DATEADD(m,-2,monthly_past_date))
) x
ON r.starburst_dept_name = x.starburst_dept_name AND r.rowid = x.rowid+1
Where r.starburst_dept_name is NOT NULL
)
Select *
From date_cte
Order by Average DESC
所以做一些测试,我已经改变了一些列数据,看看为什么它给了我一些信息。我不知道为什么当我运行查询时它给出了一个日期列,不应该出现在" january" (第4行)如下图所示:
数据库中有更多数据具有相同的确切日期' 2014-01-25 00:00:00.000',所以我不确定为什么它只会获得该行并进行比较平均?
我在运行查询之前更改了该行中的列并更改了日期?但我不确定这是否与它有关。
更新: 我添加了sqlfinddle, 我希望得到它减去平均值 来自last_month - 过去2个月之前。 它实际上正在工作,直到我做出改变并改变数据。 我做了改变以测试某种情况,这显然是导致的 了解查询存在缺陷。
答案 0 :(得分:0)
根据您的SQL Fiddle,这可以消除从出现之前的第2个月之前的连接。
SELECT
thismonth.starburst_dept_name
,lastmonth.monthtly_past_date [PrevDate]
,thismonth.monthtly_past_date [CurrDate]
,thismonth.starburst_dept_average - lastmonth.starburst_dept_average as Average
FROM dbo.cse_reports thismonth
inner join dbo.cse_reports lastmonth on
thismonth.starburst_dept_name = lastmonth.starburst_dept_name
AND month(DATEADD(MONTH,-1,thismonth.monthtly_past_date))=month(lastmonth.monthtly_past_date)
WHERE MONTH(thismonth.monthtly_past_date)=month(DATEADD(MONTH,-1,GETDATE()))
Order by thismonth.starburst_dept_average - lastmonth.starburst_dept_average DESC