2013-07-02 2 views
1

J'ai un tableau de remboursement qui comporte 16 lignes pour chaque prêt auquel appartiennent les remboursements.MySQL Sélectionner les N premières lignes du tableau avec les lignes liées à une autre

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 
| 

Les LoanIds sont des chaînes. RepaymentIds aussi

Je suis à la recherche d'une requête qui me donne les 15 premières lignes de chaque remboursement pour chaque prêt.

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

Est-ce possible avec SQL? et si oui, comment?

Répondre

2

En supposant que rep ne soit pas séquentiel, auquel cas vous pouvez utiliser WHERE rep <= 15, vous devez alors introduire un numéro de ligne par groupe. MySql n'a pas de fonction intégrée de numéro de ligne comme d'autres bases de données, mais vous pouvez utiliser user defined variables pour obtenir le même résultat

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

Je devrais être plus générique avec mes exemples ... l'ID de prêt est une certaine chaîne, pas un numéro d'identification séquentiel comme montré, ID de remboursement aussi. laisse moi éditer ça ... –

+0

@JavierNovoaC. - devrait toujours fonctionner de la même manière: http://sqlfiddle.com/#!2/2ad3e/1 – sgeddes

+0

non, puisque je ne peux pas compter sur la commande par prêt ou représentant ... –

0

si vous avez une sorte d'identité dans l'autre table, alors simple jointure interne devrait faire l'trick..something comme:

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

espoir u obtenir, sinon afficher les colonnes et les noms de table et Je pourrais essayer de vous donner la requête dont vous avez besoin, mais cela devrait vous aider à démarrer.

+0

Nope, limite ne fonctionnera pas, car cela donnez-moi seulement les 15 premiers résultats de toute la requête, pas les 15 premiers résultats pour CHAQUE table2 rangées ... –

Questions connexes