2015-06-11 36 views
0

我無法找到以下SQL查詢的解決方案。我的第一個疑問是,應該做一些積累去年數據量的技巧。累計上一年的數據

CASE 
WHEN rehuv.VER_DATUM >= dateadd(year, -1, dateadd(month, -datepart(month, @STARTDATE) + 1, @STARTDATE)) 
           AND rehuv.VER_DATUM <= DATEADD(year, -1, @ENDDATE) THEN rehuv.BELOPP ELSE 0 
END AS PREVIOUS_YEAR_ACC 

但是當我嘗試到一個特定的時間間隔內積累的數據(我希望同樣的時間間隔爲@startdate - > @EndDate但有一年,向後)。 Sql-query:

CASE 
WHEN rehuv.VER_DATUM >= DATEADD(year, -1, @STARTDATE) 
           AND rehuv.VER_DATUM <= DATEADD(year, -1, @ENDDATE) THEN rehuv.BELOPP ELSE 0 
END AS PREVIOUS_YEAR_MONTH 

預先感謝您!

最好的問候,西蒙

+0

哪些DBMS產品您使用的? (有些非ANSI SQL ......) – jarlh

+0

變量的值是什麼?@startdate'和'@ enddate'? –

+0

@jarlh Microsoft SQL! – SLI

回答

0

如果你想去年的月額,你可以試試這個:

DECLARE @STARTDATE DATETIME; 
DECLARE @ENDDATE DATETIME; 
SET @STARTDATE='2015-1-1'; 
SET @ENDDATE='2015-5-1'; 
DECLARE @LAST_YEAR DATE; 
SET @LAST_YEAR = DATEADD(YEAR, -1, DATEADD(DAY, 
    DATEPART(DAYOFYEAR, GETDATE())*-1+1, CONVERT(DATE, GETDATE()))); 

SELECT DATEADD(MONTH, DATEPART(MONTH, VER_DATUM), @LAST_YEAR) MONTH, SUM(CASE 
WHEN REHUV.VER_DATUM >= DATEADD(YEAR, -1, @STARTDATE) 
AND REHUV.VER_DATUM <= DATEADD(YEAR, -1, @ENDDATE) 
THEN REHUV.BELOPP ELSE 0 
END) AS PREVIOUS_YEAR_MONTH 
FROM REHUV 
GROUP BY DATEPART(MONTH, VER_DATUM)