2016-11-08 59 views
1

表A具有数百万条记录从2014年起,使用OracleSQL聚合

ID Sales_Amount Sales_Date 
1  10   20/11/2014 
1  10   22/11/2014 
1  10   22/12/2014 
1  10   22/01/2015  
1  10   22/02/2015   
1  10   22/03/2015  
1  10   22/04/2015  
1  10   22/05/2015 
1  10   22/06/2015  
1  10   22/07/2015 
1  10   22/08/2015 
1  10   22/09/2015  
1  10   22/10/2015  
1  10   22/11/2015 

表B

ID ID_Date 
1 22/11/2014 
2 01/12/2014 

我想总数为6个月的总和,以及1年ID服用1从表B为22/11/2014

Output Sales_Amount_6Months Sales_Amount_6Months 
1    70     130 
开始
日期

在这种情况下我应该使用add_months吗?

+0

提供你已经尝试了 – Viki888

+0

查询你如何决定采取从表B中的日期22/11/2014,而不是其他日期?你从表B中取得“最古老”的日期吗?另外:什么是“6个月” - 从2014年11月22日到2015年5月21日? – mathguy

+0

汇总总计采用表B中的日期作为ID1的最低日期,2014年11月22日,从那天起我们需要从表B计算6个月总计和12个月总计,请做add_months(22-11 -2014,6)和add_months(22-11-2014,12)12个月 – kalis

回答

7

是的,你可以使用ADD_MONTHS()和有条件聚集:

SELECT b.id, 
     SUM(CASE WHEN a.sales_date between b.id_date AND ADD_MONTHS(b.id_date,6) THEN a.sales_amount ELSE 0 END) as sales_6_month, 
     SUM(CASE WHEN a.sales_date between b.id_date AND ADD_MONTHS(b.id_date,12) THEN a.sales_amount ELSE 0 END) as sales_12_month 
FROM TableB b 
JOIN TableA a 
ON(b.id = a.id) 
GROUP BY b.id