2013-07-02 29 views
1

我有一個還款表,每個還款所屬的貸款都有16行。MySQL從表中選擇前N行,並將行與另一行相關

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是一些字符串。 還款的ID太

我正在尋找一個查詢,它給了我每個貸款的每個還款的前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?如果是這樣,怎麼樣?

回答

2

假設代表不是連續的,在這種情況下您可以使用WHERE rep <= 15,那麼您需要爲每個組引入一個行號。 MySQL沒有內置的其他數據庫一樣行號功能,但可以使用user defined variables來達到同樣的效果

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 
+0

我應該更通用與我的例子...貸款ID是一些字符串,而不是一個順序的Id號碼所示,還款編號也。讓我編輯一下...... –

+0

@JavierNovoaC。 - 仍然應該以同樣的方式工作:http://sqlfiddle.com/#!2/2ad3e/1 – sgeddes

+0

不,因爲我不能依靠貸款或代表訂購... –

0

,如果你有某種在其他表ID的那麼簡單內連接應該做的像trick..something:

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

希望你得到它,如果不發佈的列和表名和我可以嘗試給你你需要的查詢,但這應該讓你開始。

+0

不,限制將無法正常工作,因爲這將給我所有的查詢的前15個結果,而不是每個table2行的前15個結果... –

相關問題