2016-08-11 9 views
1

Ein Unternehmen belohnt jeden Tag einen seiner Mitarbeiter. Die Daten werden in einer Tabelle namens REWARDS verwaltet. Wie in den folgenden Beispieldaten gezeigt, haben wir eine Zeile pro Tag in der Tabelle mit der folgenden Struktur:MySQL Kumulative Summe

(Sorry für die schlechte Tabellenformatierung)

REWARD_DATE EMP_ID REWARD_AMT 
1-Jan-15 101  400 
2-Jan-15 102  300 
3-Jan-15 101  700 
4-Jan-15 102  500 
5-Jan-15 103  100 

Können Sie eine Abfrage schreiben, den Lauf melden Summen wie folgt?

REWARD_DATE #EMP TOT_REWARD_AMT 
1-Jan-15 1   400 
2-Jan-15 2   700 
3-Jan-15 2   1400 
4-Jan-15 2   1900 
5-Jan-15 3   2000 
+0

Was ist der Datentyp von 'REWARD_DATE'? – 1000111

+0

Im Gegensatz zu anderen RDBMS unterstützt MySQL keine analytischen Funktionen (was diese Aufgabe zu einem Kinderspiel machen würde). Während es immer noch möglich ist, Hacks mit Benutzervariablen zu verwenden, sind Sie wahrscheinlich am besten in der Lage, Berechnungen dieser Art in Ihrem Anwendungscode durchzuführen. – eggyal

+0

Es ist nicht notwendig, dass dies in MySQL durchgeführt wird. Es kann jede SQL-Umgebung sein. REWARD_DATE ist eine numerische Variable. – James

Antwort

2

Sie könnten dies tun (etwas vereinfacht jetzt):

SELECT b.rdate, COUNT(distinct a.eid) empcnt, SUM(a.amnt) total 
FROM tbl a 
INNER JOIN tbl b ON b.rdate>=a.rdate 
GROUP BY b.rdate 

wie hier gezeigt: http://sqlfiddle.com/#!9/f6871/2

+0

Das ist exzentrisch! Schöne Art, damit umzugehen. :) – 1000111

+0

Nun, nur der einfachste Weg. ;-) – cars10m

+0

Um ehrlich zu sein, habe ich anders gedacht (allmählich in Richtung Komplexität). Und ich liebte die Art und Weise, wie Sie die Verbreitung früherer Daten in die nächsten Daten umwandelten. – 1000111