2016-07-20 16 views
1

Ich verwende wählen:berechnen Summe bis fünf Jahre zurück in SQL Server

Select year, month, par1, par2, par3, value 
from table1 

diese Tabelle zu erzeugen, zurück (es ist 60 Monate).

Ergebnis sollte wie unten sein:

enter image description here

Wie kann ich das tun?

+0

Sie Monat Spalte ist ein String? irgendeine Datumsspalte oder Ganzzahl? – Squirrel

+0

Wie bestimmen Sie, in welchem ​​Jahr die fünfjährige Zeitspanne beginnen soll? –

+0

ja: Jahr, Monat, Par1, Par2, Par3 sind String – 4est

Antwort

1

für Sie Fall, da die Tabellen in Zeichenfolge sind, verwendet i einen CTE ein Datum Spalte für die erforderliche Berechnung zu formulieren

; with 
cte as 
(
    select *, date = convert(date, year + '-' + substring(month, 2, 2) + '-01', 121) 
    from table1 
) 
select * 
from cte c 
    outer apply 
    (
     select SumOfValue = sum(Value) 
     from cte x 
     where x.date >= dateadd(month, -60, c.date) 
     and x.date <= c.date 
    ) t 

, wenn Sie die Summe() zu einer Gruppe von anderen Spalte benötigen, fügen Sie die Bedingung für die OUTER APPLY Abfrage

EDIT 1:

select * 
from cte c 
    outer apply 
    (
     select SumOfValue = sum(x.Value) 
     from cte x 
     where x.date >= dateadd(month, -60, c.date) 
     and  x.parameter1 = c.parameter1 
     and  x.parameter2 = c.parameter2 
     and  x.date  <= c.date 
    ) t 
+0

dateadd (monat, -60, c.date) -> sollte ich hier monat bis datum konvertieren? weil ich einen Fehler bekommen habe "'Datum' ist keine anerkannte Dateadd Option." – 4est

+0

Sie verwenden 'SQL Server 2008' richtig? das sollte funktionieren. Wenn nicht in der cte verwenden Sie "Datum = konvertieren (DatumZeit, ...)" – Squirrel

+0

ja, SQL Server 2008 .... können Sie bitte Ihre Abfrage oben aktualisieren? – 4est