2016-08-04 4 views
4

Мне нужно заполнить Amounts для отображения по диапазону дат в месяц. Для того, чтобы проиллюстрировать, пожалуйста, взгляните на следующую таблицу:Совокупность нескольких столбцов на основе определенного диапазона дат за месяц

Invoice_Payment

Customer_id Invoice_no Invoice_date Amount 
--------------------------------------------------- 
10    10023   2016-07-08  60 
10    10018   2016-08-04  90 
11    10016   2016-07-01  110 
11    10021   2016-07-05  120 
12    10028   2016-07-11  10 
12    10038   2016-07-31  5 

Как вы можете заметить, я хочу, чтобы сгруппировать их на основе Customer_id и отображения даты, как начала до конца. Кроме того, это нужно делать только за каждый месяц.

После запроса я пытался до сих пор:

select Customer_id, (mindate + ' to ' + maxdate) Date_Range, Amount 
from (
    select Customer_id, sum(Amount) Amount, min(Invoice_date) mindate, max(Invoice_date) maxdate 
    from Invoice_Payment 
    group by Customer_id 
    ) I ; 

Из выше запроса я получаю Output как:

Customer_id Date_Range     Amount 
10    2016-07-08 to 2016-08-04  150 
11    2016-07-01 to 2016-07-05  230 
12    2016-07-11 to 2016-07-31  15 

Пожалуйста, проверьте это .. SQL Fiddle Working Demo

Скажем Customer_id = 10, у которого есть Invoice_date в July,2016 и August,2016. Мне нужно суммировать все платежи этого конкретного Клиента за июль и август отдельно в пределах определенного диапазона дат. Но я получаю сумму Amount всего Invoice_date из вышеперечисленного.

Желаемый результат:

Customer_id Date_Range     Amount 
10    2016-07-08 to 2016-07-08  60 
10    2016-08-04 to 2016-08-04  90 
11    2016-07-01 to 2016-07-05  230 
12    2016-07-11 to 2016-07-31  15 

Как я могу получить за это? Любая помощь будет принята с благодарностью.

ответ

2

Вы почти закончили. Просто добавьте YEAR и MONTH в GROUP BY.

select Customer_id, (mindate + ' to ' + maxdate) Date_Range, Amount 
from (
     select Customer_id, 
     sum(Amount) Amount, min(Invoice_date) mindate, max(Invoice_date) maxdate 
     from #Invoice_Payment 
group by 
    Customer_id, 
    YEAR(Invoice_date), 
    MONTH(Invoice_date) 
) I ; 
2

Как насчет группировки по customer_id, месяц и год

select Customer_id, (mindate + ' to ' + maxdate) Date_Range, Amount 
from (
     select Customer_id, 
     sum(Amount) Amount, min(Invoice_date) mindate, max(Invoice_date) maxdate 
     from #Invoice_Payment 
     group by Customer_id,month(Invoice_date), year(Invoice_date) 
) I 
order by customer_id; 
+0

Он отлично работает, теперь спасибо! –

Смежные вопросы