2014-04-25 36 views
0

我有一個查詢:爲什麼查詢會顯示錯誤月份的數據?

;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行),在那裏像下面的圖片: enter image description here

數據庫具有具有相同的多個數據確切的日期'2014年1月25日00:00:00:00',所以我不知道爲什麼它只會得到這一行,並比較平均?

我做了之前我運行查詢改變該行中的列並更改日期?但我不確定這是否與它有關。

更新: 我已經添加了sqlfinddle, 我想獲得它減去平均 從LAST_MONTH - 最後2個月前。 它實際上一直在工作,直到我做出更改並更改數據。 我做了一些修改來測試某種情況,這顯然導致 得知查詢存在缺陷。

+0

一個SQL小提琴將是很好的方式 – UnhandledExcepSean

+0

http://sqlfiddle.com/#!3/d74b6/1 – user3408399

回答

0

基於你的SQL小提琴,這消除了從前一個月的連接顯示出來。

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 
+0

感謝,但沒有,它實際上是比較隨機數據 – user3408399

+0

,以幫助這個問題@ user3408399是這對你有好處嗎? – UnhandledExcepSean