mysql - SQL中是否有方法获取前n行,按日期排序,PER ID(不仅仅是顶部的前n行)

标签 mysql sql

我在数据库中有一系列付款记录。我只需要每个 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/

相关文章:

php - 使用 PDO 预准备语句插入时 MySQL 性能极差

Python - 将列表作为参数传递给 SQL,以及更多变量

sql - TSQL 日期时间 ISO 8601

mysql - 在我的 MySQL View 中获取重复行

mysql - rails : error: database configuration does not specify adapter

java - MySQL同时插入用户和密码,但在不同的表中

mysql - sql - 如何在找到当月的最高分时按月分组?

php - ( PHP/JQuery?) 获取复选框被选中时的表行值

mysql - JDBC连接不同Host上的MySQL所使用的协议(protocol)

php - 选择中使用一个字段时模型不返回值