2017-03-26 5 views
0

Ich versuche, Löhne für Arbeiter für 8 Quartale aggregieren. Als Spalten habenSQL verschachtelte Gesamtlohn nach Quartal

employee id 
quarter (1 digit int) 
year (4 digit int) 
quarterly_wage 
year_quarter (string i created from quarter and year) 

würde Ich mag jede Zeile haben, mit

employee id, year_quarter, 8 quarters of wages 

zB 2 Mitarbeiter, beginnt man im Jahr 2010 Quartal 1 und die zweite beginnt im Jahr 2010 Quartal 4. Daten aus 2010Q1 bis 2014Q4.

Employ1 2010Q1 SumOfWages2010Q1_2012Q4 
Employ1 2010Q2 SumOfWages2012Q2_2013Q1 
Employ1 2010Q3 SumOfWages2012Q2_2013Q2 
Employ1 2010Q4 SumOfWages2012Q2_2013Q3 
Employ2 2010Q4 SumOfWages2010Q4_2012Q3 
etc... 

wird dies für 15 Jahre, 1000 Mitarbeiter sein. Alle Vorschläge würden sehr geschätzt werden.

Antwort

0

Sie haben die volle Daten für alle Mitarbeiter Unter der Annahme, (das heißt, keine Lücken), können Sie tun:

select empid, year, quarter, quarterly_wage 
     sum(quarterly_wage) over (partition by emp_id 
           order by year, quarter 
           rows between current row and 7 following 
           ) as wages_8quarters 
from t; 
+0

oh mein, ich ging eine Antwort ähnlich zu schlafen und gefunden ... Danke für eine bessere Lösung! –

+0

Ich möchte eine boolesche Spalte erstellen, um zu zeigen, dass eine Person mindestens zwei aufeinander folgende Quartale mit demselben Arbeitgeber gearbeitet hat, idealerweise> = 3. Ich bin beigetreten Arbeitgeber mit "Mitarbeiter" Personalausweis. Ich habe den Beitritt von Mitarbeiter ID & YearQuarter bestellt. Ich habe andere Variablen, die ich in der Abfrage behalten werde. Der Arbeitnehmer könnte in einem Quartal oder mehreren Quartalen mit mehreren Arbeitgebern zusammengearbeitet haben. nicht besorgt über diese Fälle. –