【发布时间】:2019-11-21 02:35:16
【问题描述】:
我的“deals_payments”表是:
Due Date Payment ID
1-Mar-19 1,000.00 123
1-Apr-19 1,000.00 123
1-May-19 1,000.00 123
1-Jun-19 1,000.00 123
1-Jul-19 1,000.00 123
1-Aug-19 1,000.00 123
1-Jun-19 500.00 456
1-Jul-19 500.00 456
1-Aug-19 500.00 456
我有 SQL 代码:
select
count(*), payment
from (select deals_payments.*,
(row_number() over (order by due_date) -
row_number() over (partition by payment order by due_date)
) as grp
from deals_payments
where id = 123
) deals_payments
group by grp, payment
order by grp
这给了我我想要的 - 每个不同金额的付款次数 - (这里我只要求 ID 123):
COUNT(*) PAYMENT
6 1000.00
但现在我需要两个 ID(123 和 456)的付款总和,其中到期日期相同,并计算每个不同金额的付款次数,如下:
COUNT(*) PAYMENT
3 1000.00
3 1500.00
我尝试了以下方法,但它给了我“缺少右括号”错误。怎么了?
select
count(*),
(select
sum(total) total
from (select distinct
due_date,
(select
sum(payment)
from deals_payments
where (due_date = a.due_date)) as total
from deals_payments a
where a.id in (123, 456)
and payment > 0)
group by due_date
order by due_date) b
from (select deals_payments.*,
(row_number() over (order by due_date) -
row_number() over (partition by payment order by due_date)
) as grp
from deals_payments
where id = 123
) deals_payments
group by grp, payment
order by grp
【问题讨论】:
-
您的示例数据显示 1000.00 和 1500.00。这些是如何计算的?
-
基于截止日期。请参阅帖子顶部的表格 - 它在 6 月、7 月和 8 月的付款出现在 ID 123 和 456 中,因此总和为 1500。
-
。 .在这几个月里,这两个 ID 都有付款。为什么另一个不是3000.00?
-
我不想要相同 ID 的付款总和,我想要 ID 123 + ID 456 的总和,到期日期相同。