據我知道你需要一些「分區」或行運行總計。看起來在MySql中,你需要對變量進行一些「黑客行爲」,因爲分析函數在這個數據庫中不可用。
以下查詢將做到這一點。它使用三個變量 - @rollingsum到F列的存儲和,@prevP和@prevB變量來存儲B和P列)的先前值
SELECT s.p, s.b, s.f, s.rollingSum FROM
(
SELECT p,
b,
f,
IF([email protected] AND [email protected],
@rollingsum := @rollingsum + f,
@rollingsum := f) as rollingSum,
@prevP := p,
@prevB := b
FROM test_table p, (SELECT @rollingsum := 0, @prevP := '', @prevB := '') r
ORDER BY p,b) s
實施例:
源數據:
P B F
1 1 10
1 1 10
1 2 10
1 2 10
1 2 10
2 2 10
2 2 10
2 2 10
結果以上查詢(rollingsum列是您的H列 - 總積分在Excel):
P B F ROLLINGSUM
1 1 10 10
1 1 10 20
1 2 10 10
1 2 10 20
1 2 10 30
2 2 10 10
2 2 10 20
2 2 10 30
看起來很完美!我離開我的電腦,但今晚我回到家時,我會放棄它。它看起來正是我所需要的。謝謝! –
好吧,離得更近。我需要改變的唯一事情是我認爲ORDER BY需要成爲運行的第一件事情之一。因爲這些文件並不總是按正確的順序。我需要它將rollingsum值設置爲總點列。下面是我現在看到的值: –
SELECT Test.Class_Subset,Test.RegNum,Test.Points,Test.Total_Points,Test.rollingsum,Test.Date_Earned FROM( SELECT Class_Subset,Total_Points,RegNum,Points, Date_Earned,IF(Class_Subset = @prevSub AND RegNum = @prevNum,@rollingsum:= @rollingsum +'Points',@rollingsum:''Points')AS rollingSum,@prevSub:= Class_Subset,@prevNum:= RegNum FROM測試( SELECT @rollingsum:= 0,@prevSub:= '',@prevNum:= '' )R ORDER BY REGNUM,Class_Subset,Date_Earned,Total_Points )測試 –