我有一个问题:
;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因此,在做一些测试时,我更改了一些列数据,以了解为什么它会给我提供某些信息。我不知道为什么当我运行查询时,它给出了一个日期列,而不应该是从“一月”(第4行)开始的,如下图所示:

数据库有更多的数据具有相同的确切日期'2014-01-25 00:00:00.000',所以我不确定为什么它只获取该行并比较平均值?
我是否在运行查询之前更改了该行中的列并更改了日期?但我不确定这是否与此有关。
更新:我已经添加了sqlfinddle,我想让它从last_month中减去平均值--2个月前。它实际上是工作的,直到我进行了更改并更改了数据。我做出这些更改是为了测试特定的情况,这显然会导致了解到查询存在缺陷。
发布于 2014-04-26 07:36:50
基于您的SQL文件夹具,这消除了来自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 DESChttps://stackoverflow.com/questions/23304638
复制相似问题