2016-11-08 4 views
1

Таблица А имеет миллионы записей с 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

Как вы решили взять дату 22/11/2014 из таблицы B, а не другой Дата? Вы берете «самую старую» дату из таблицы B? Также: Что такое «6 месяцев» - с 22/11/2014 по 21/5/2015? – mathguy

+0

Агрегация итогов принимает дату из таблицы B как минимальную дату, которая составляет 22/11/2014 для ID1, и с этой даты нам нужно рассчитать итоговые суммы за 6 месяцев и итоговые суммы за 12 месяцев из таблицы B, пожалуйста, 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