Есть ли лучший способ использовать какой-то запрос вместо групповых объединений - PullRequest
1 голос
/ 20 марта 2020

для ex мне нужно выбрать транзакцию из периода сумма транзакции за последние 3 месяца сумма транзакции за последние 4 месяца сумма транзакции за последний ... месяц сумма транзакции за последний n месяц

есть ли лучший способ использовать сумму сверх или et c

я использую запрос как

with 
third as (
select name_id,sum(transaction) from table where pay_Date between add_months(sysdate,-3) and sysdate
group by name_id
),
fourth as (
select name_id,sum(transaction) from table where pay_Date between add_months(sysdate,-4) and sysdate
group by name_id
),
fifth as (
select name_id,sum(transaction) from table where pay_Date between add_months(sysdate,-5) and sysdate
group by name_id
)

select * from third t
left join fourth f on t.name_id = f.name_id
left join fifth f2 on t.name_id = f2.name_id

1 Ответ

2 голосов
/ 20 марта 2020

Вы можете сделать это с условным агрегированием:

select name_id,
  sum(case when pay_Date between add_months(sysdate,-3) and sysdate then transaction end) sum3,   
  sum(case when pay_Date between add_months(sysdate,-4) and sysdate then transaction end) sum4,
  sum(case when pay_Date between add_months(sysdate,-5) and sysdate then transaction end) sum5
from tablename
group by name_id
...