Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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从表中选择与另一行相关的前N行_Mysql_Sql_Greatest N Per Group - Fatal编程技术网

MySQL从表中选择与另一行相关的前N行

MySQL从表中选择与另一行相关的前N行,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,我有一个还款表,其中有16行的每一笔贷款的还款属于 Repayments loanid repid amnt -------------------- a1 r1 1,100 a1 r2 1,100 | | | a1 r16 1,105 b2 s1 2,500 b2 s2 2,500 | | | b2 s16 2,510 | |

我有一个还款表,其中有16行的每一笔贷款的还款属于

Repayments
loanid  repid  amnt
--------------------
a1      r1     1,100
a1      r2     1,100
|       |      |
a1      r16    1,105
b2      s1     2,500
b2      s2     2,500
|       |      |
b2      s16    2,510
|       |      |

Loans
loanid  othercolumns...
-----------------------
a1
b2
|
blahid
|
LoanIds是一些字符串。 还债人也是

我正在寻找一个查询,其中给出了每一笔贷款还款的前15行

loanid  repid  amnt
a1      r1     1,100
a1      r2     1,100
|       |      |
a1      r15    1,105
b2      s1     2,500
b2      s2     2,500
|       |      |
b2      s15    2,510
|       |      |

这在SQL中是可能的吗?如果是,怎么做?

如果您在另一个表中有某种ID,那么简单的内部联接应该可以实现这一点。类似于:

select t1.column1, t1.column2 
from table1 t1 
inner join table2 t2 on t1.id = t2.t1id
limit 15

希望您能理解,如果不发布列和表名,我可以尝试为您提供所需的查询,但这应该可以让您开始了。

假设rep不是顺序的,在这种情况下,您可以使用WHERE rep nope,limit将不起作用,因为这将只提供所有查询的前15个结果,不是每个表2行的前15个结果…我应该更一般地使用我的示例。。。贷款id是一些字符串,不是如图所示的顺序id号,也是还款id。让我编辑一下…@JavierNovoaC仍然应该以同样的方式工作:@JavierNovoaC.-你需要进一步解释。您需要通过贷款订购来创建分组。至于另一个字段,这取决于您希望如何返回结果,每组保留15条记录。应该还是一样的逻辑…哦。。。我从你的解决方案中复制了一些错误的内容。现在开始工作了!:@哈维尔诺沃克不用担心,很高兴我们找到了答案!
select *
from (
  select loan, rep, amnt, @row:=if(@prevLoan=loan, @row+1, 1) rn, @prevLoan:=loan
  from repayments
    join (select @row:=0, @prevLoan:=0) t
  order by loan, rep
  ) t
where rn <= 15