我在数据库中有一系列付款记录。我只需要每个 ID 的前 n 条记录总计小于每个 ID 的另一个列变量(初始发票)。
select *
FROM db.paymentrecords
Order by PaymentDate;
索引是处理这个问题的正确方法吗?我不确定如何指定 MYSQL 只从每个分组中获取前 n 条记录(每个分组只是每个 id 的所有付款)。
这个想法是计算出在任何时候累计在发票上支付了多少。
也许是
WHERE sum(first n records in each grouping < aggregate invoice amount)
我觉得这应该是直截了当的,但我不确定如何使用 SQL 从逻辑上做到这一点。任何帮助将不胜感激。谢谢大家!
编辑** 所以它最终在 sql 中对我来说有点太复杂了,我们切换并使用 python 以编程方式执行我们需要的逻辑。我仍然不确定如何通过索引每组记录在 sql 中完成此操作?感谢大家的帮助!
最佳答案
在 MySQL 8+ 中,您可以使用窗口函数:
select pr.*,
sum(amount) over (partition by id order by paymentdate) as running_amount
from db.paymentrecords pr;
关于mysql - SQL中是否有方法获取前n行,按日期排序,PER ID(不仅仅是顶部的前n行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56943382/