2014-10-21 119 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