sql - Psql : 获取每个合作伙伴发票和最后一次付款的 Min、Max 和 Count 记录
问题描述
我有一张这样的表格发票:
id, partner_id, number, invoice_date
和这样的付款表:
id, payment_date, partner_id
我想获得 number 和 invoice_date 的最小值和最大值,并计算发票,以及每个合作伙伴的最后一次付款,如下所示:
partner_id, min number, min date, max number, max date, count, last_pay
1, INV-2017-003, 02-01-2017, INV-2020-010, 01-01-2020, 142, 02-12-2019
5, INV-2019-124, 05-03-2019, INV-2020-005, 01-01-2020, 150, 01-01-2020
....
解决方案
您可以加入这三个表,包括合作伙伴和按合作伙伴的 id 列分组以及相关的聚合:
select pr.id, min(invoice_date), max(invoice_date), count(*), max(payment_date) as last_pay
from partners pr
left join invoices i on i.partner_id = pr.id
left join payments p on p.partner_id = pr.id
group by pr.id
更新:您可以根据最大和最小日期使用和min() over ()
分析函数来获取所需的代码:max() over ()
row_number()
select *
from
(
select pr.id,
min(invoice_date) over (partition by pr.id order by invoice_date) as min_invoice_date,
max(invoice_date) over (partition by pr.id order by invoice_date desc) as max_invoice_date,
max(code) over (partition by pr.id order by invoice_date desc) as max_code,
min(code) over (partition by pr.id order by invoice_date) as min_code,
count(*) over (partition by pr.id) as cnt,
max(payment_date) over (partition by pr.id) as last_pay,
row_number() over (partition by pr.id order by invoice_date desc) as rn
from partners pr
left join invoices i on i.partner_id = pr.id
left join payments p on p.partner_id = pr.id
) q
where rn = 1
推荐阅读
- c++ - int* 和 int[] 类型的无效操作数到二元运算符+
- regex - 我可以使用正则表达式、Like 运算符和/或 Instr() 在较大的字符串中查找模式的索引吗?
- laravel - 如何将 laravel 路由重定向到我使用 vue-router 在 vue 中创建的链接
- excel - 使用 Google Colab 时如何将文件写入本地驱动器?
- excel - 转换为 Excel 后的数字形式为“123.456.789”
- excel-formula - Excel公式表示时间是否在某个小时范围内
- ios - 在`ios`中使用常规图像和按钮图像有何不同?
- angular - 启用跨域请求 Spring Boot
- inno-setup - Inno Setup:如果快捷方式已经存在,请不要(重新)创建快捷方式
- javascript - 世博会位置权限立即被拒绝 iOS 模拟器