Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL中是否有方法获取前n行,按日期、每个ID排序(而不仅仅是顶部的前n行)_Mysql_Sql - Fatal编程技术网

Mysql SQL中是否有方法获取前n行,按日期、每个ID排序(而不仅仅是顶部的前n行)

Mysql SQL中是否有方法获取前n行,按日期、每个ID排序(而不仅仅是顶部的前n行),mysql,sql,Mysql,Sql,我在数据库中有一系列付款记录。我只需要每个id的前n条记录,这些记录的总和小于每个id的另一个列变量(初始发票) select * FROM db.paymentrecords Order by PaymentDate; 索引是处理这个问题的正确方法吗?我不确定如何指定MYSQL只从每个分组中获取前n条记录(每个分组只是每个id的所有付款) 这个想法是要计算出在任何时候发票上累计支付了多少钱 也许是类似于 WHERE sum(first n records in each grouping

我在数据库中有一系列付款记录。我只需要每个id的前n条记录,这些记录的总和小于每个id的另一个列变量(初始发票)

select * 
FROM db.paymentrecords
Order by PaymentDate;
索引是处理这个问题的正确方法吗?我不确定如何指定MYSQL只从每个分组中获取前n条记录(每个分组只是每个id的所有付款)

这个想法是要计算出在任何时候发票上累计支付了多少钱

也许是类似于

WHERE sum(first n records in each grouping < aggregate invoice amount)
WHERE sum(每个分组中的前n个记录<总发票金额)
我觉得这应该是直截了当的,但我不确定如何用SQL逻辑地做到这一点。如蒙协助,将不胜感激。谢谢大家


编辑**所以对我来说,它在sql中有点太复杂了,我们切换并使用python编程来执行我们需要的逻辑。我仍然不确定如何在sql中通过索引每组记录来实现这一点?谢谢大家的帮助

在MySQL 8+中,您可以使用窗口函数:

select pr.*,
       sum(amount) over (partition by id order by paymentdate) as running_amount
from db.paymentrecords pr;

你能添加你正在查询的数据库结构吗?