2016-10-04 68 views

回答

1

對於SQL Server 2008或更高版本;

; WITH CTE AS 
(
SELECT *, LAG(VALUE) OVER(ORDER BY MONTH) AS XX FROM YOURTABLE 
) 
SELECT AVG(CAST(VALUE AS FLOAT)/CAST(XX AS FLOAT)) FROM CTE WHERE XX IS NOT NULL 
+0

甚至更​​早版本的SQL SERVER不支持'LAG'。 –

+0

@prdp。 。 。 OP沒有指定正在使用的數據庫,'LAG()'是ANSI標準功能。 –

+0

你可以通過其他方式聯繫我嗎?非常感謝 –

1

試試這個:

SELECT AVG(Calc) 
FROM 
(
    SELECT t2.Value/t1.Value AS Calc 
    FROM [Table] t1 
    JOIN [Table] t2 
    ON t1.[Month] = t2.[Month] + 1 
) calc 
+0

我運行SQL錯誤消息208,級別16,狀態1,行1 無效的對象名稱'VILIVE'。 (VILIVE是mytable) –

+0

你在正確的數據庫中運行它嗎? –

+0

對不起,我不明白。 –

0

試試下面的查詢。

  select avg(CAST(a.value as FLOAT)/cast(a.mm as FLOAT)) from 
      (
      SELECT *, LAG(value) OVER(ORDER BY MONTH) AS mm FROM #your_table 
      ) 
      a where a.mm is not null 

請讓我們知道如果u有一個顧慮

+0

我使用ms sql 2008,lag不是公認的內置函數名稱。錯誤。 –

0

我想用查詢SQL爲:

如果我選擇月= 3 =>結果= AVG(VALUE2 /值1,值3/VALUE2 )-1-

如果我選擇一個月= 4結果= AVG(VALUE2 /值1,值3 /值2,值4 /值3)-1

由於