2016-04-11 28 views
2

我真的SQL Server 2012中編寫這個SQL函數如何使用滯後功能在SQL Server 2008

;With Quote as (
    SELECT SID,SHEET,Code, Date, Data, 
      LAG(Data) OVER(ORDER BY Date) As LastMonthData 
    FROM RMQ_DATA WHERE [SHEET] IN(0) 
) 
SELECT [Quote].[SID], Quote.DATE,Quote.DATA,Quote.SHEET, Quote.CODE, 
     CASE 
      WHEN ISNULL(LastMonthData, 0) = 0 THEN null 
      ELSE (LastMonthData/Data) * 100 
     END As Quote, 
     RMQ_SUBCAT.TARGET_CODE, RMQ_SUBCAT.RMQ_SUBCAT, RMQ_CAT.RMQ_CAT_NAME, 
     RMQ_CAT.ENABLED 
FROM Quote 
Left outer Join RMQ_SUBCAT on Quote.CODE =RMQ_SUBCAT.TARGET_CODE 
left outer join RMQ_CAT on RMQ_SUBCAT.TARGET_SID=RMQ_CAT.SID 
where RMQ_CAT.ENABLED='Y' and 
     Quote.DATE between '2015/01/01' and '2015/11/01' 

,但在第一線

With Quote as ( 
    SELECT SID,SHEET,Code, Date, Data, 
      LAG(Data) OVER(ORDER BY DATE) 

** LAG(數據)我有一個錯誤。所以我不知道如何在SQL Server 2008中使用LAG()函數。

任何人都可以幫助我嗎?

回答

1

不幸的是,LAG不適用於2012年之前的SQL Server版本。你必須使用ROW_NUMBER與自連接,而不是:「作爲‘Quote_LAG’指定的數據行‘數據’幾次」

;With Quote as (
    SELECT SID, SHEET,Code, [Date], Data, 
      ROW_NUMBER() OVER (ORDER BY [Date]) AS rn 
    FROM RMQ_DATA 
    WHERE [SHEET] IN (0) 
), Quote_LAG AS (
    SELECT q1.SID, q1.SHEET, q1.Code, q1.[Date], q1.Data, 
      q2.Data AS LastMonthData 
    FROM Quote AS q1 
    LEFT JOIN Quote AS q2 ON q1.rn = q2.rn + 1 
) 
... rest of the query here 
+0

當我使用你的函數,我真的越來越錯誤。你有任何想法如何解決它 –

+0

@ekremtapan有一個錯誤。請檢查我所做的修改。 –

+0

感謝您的支持;) –