2014-10-21 129 views
2

我有顯示的數據如下:MySQL的:複雜的聚合查詢

table: School_Work 

ID Pay_Date Hours Amount 
1 1/5/2014 5  20 
1 1/5/2014 7  30 
1 1/5/2014 10  25 
1 1/8/2014 15  30 
1 1/9/2014 18  25 
2 1/7/2014 5  15 
2 1/7/2014 5  10 
2 1/9/2014 7  15 
2 1/9/2014 9  26 
2 1/9/2014 10  100 

我有以下查詢ATM:

SELECT ID, min(Pay_Date) as Start_Date, max(Pay_Date) as End_Date, sum(Amount) As Total_Without_Beginning_Start_Date 
FROM School_Work 
GROUP BY ID 

代碼工作正常,但我需要它不包括起始日期計算總金額。

ID 1只應

30+25 

ID 2只應

15+26+100 

我嘗試使用具有子句也但沒有工作。感謝您的輸入〜

我需要的結果是

ID Start_Date End_Date Total_Without_Beginning_Start_Date 
1 1/5/2014  1/9/2014 55 
2 1/7/2014  1/9/2014 141 
+0

那麼不要在每個ID中包含最早的? – exussum 2014-10-21 21:40:55

+0

解釋多一點?我沒有得到該問題 – Steve 2014-10-21 21:44:44

+0

我需要 ID 1日期1/5/2014不包括在總和(金額)計算中 ID 2日期2014年7月1日未包括在總和(金額)計算中 – 2014-10-21 23:02:20

回答

2

你可以用一個子查詢做到這一點(通常是一個壞主意,但其重量輕或1次查詢罰款)。試試這個......

SELECT x.ID, 
     min(x.Pay_Date) as Start_Date, 
     max(x.Pay_Date) as End_Date, 
     sum(x.Amount) - (select sum(y.Amount) from School_Work y where y.ID = x.ID and y.Pay_Date = min(x.Pay_Date) order by y.Pay_Date asc limit 1) As Total_Without_Beginning_Start_Date 
FROM School_Work x 
GROUP BY x.ID 
+0

http:///sqlfiddle.com/#!2/a988ec/1我剛剛在jsfiddle上運行它,它給了我110而不是55的結果。 – 2014-10-21 23:44:01

+0

@ParkBroom啊,好的,對不起!我沒有意識到一天可能有多個ID。我編輯了我的答案,請立即嘗試。 – Ruslan 2014-10-21 23:51:29

+1

真棒男人謝謝! – 2014-10-21 23:53:44