2014-05-08 148 views
0

我有兩個表。帳戶表和交易表。我想列出所有賬戶與他們的最後交易。由於沒有事務的情況下可能存在需要左連接。SQL左外部加入一對多行

我有類似

select * from Account ac left join Transaction trans on ac.id = trans.acc_id 

但是,這將列出所有的交易數據。不知道如何修改它。

+1

什麼字段的交易將被用來知道這是最後一個? – geoand

+0

交易表中'id'字段的@geo和max值。 –

回答

2

第一左連接讓你帳戶的最後\最大事務ID。第二個左連接爲您獲取最後一個ID的所有交易信息。

select ac.*, lasttrans.* 
from Account ac 
left join (select acc_id, max(id) as id from Transaction group by acc_id) transmax 
    on ac.id = transmax.acc_id 
left join Transaction lasttrans on lasttrans.id = transmax.id 
0

沿着只需使用一個aggregate功能與group by

select * from 
from Account ac left join Transaction trans 
on ac.id = trans.acc_id 
where trans.id in (select max(id) from trans group by ac.id) 

編號或日期這有史以來的是,你想獲得的max的列..

+0

由於我們使用group by by ac.id,因此我們無法在此查詢中查找其他列,例如交易金額等。我們可以使用max func獲取tran id/date。 –

+0

@AkhilKNambiar:現在檢查...編輯答案 –

+0

不......只是一個問題,當我把數量。有時沒有交易,那麼該數據沒有列出 –

2

您可以通過連接Account表試試只有交易表的acc_id對應於每個acc_id的最大ID:

 select ac.*, t.* from Account ac left join (select acc_id, max(id) from Transaction group by acc_id) trans on ac.id = trans.acc_id left join Transaction t on trans.id=t.id 
+0

無法取得交易金額等字段,因爲使用了group by。 –

+0

請添加關於您提供的單線解決方案關鍵方面的說明。 – Rachcha

+0

@AkhilKNambiar:交易金額等交易表的一個字段? –

0

這是否接近你在期待什麼?

with acc as 
(select 1 acc_id, 'name1' acc_name from dual union 
select 2 acc_id, 'name2' acc_name from dual union 
select 3 acc_id, 'name3' acc_name from dual), 
trans as 
(select 1 trans_id, 1 trans_acc_id, 'transaction detail 1' transdtl from dual 
union 
select 2 trans_id, 1 trans_acc_id, 'transaction detail 2' transdtl from dual 
union 
select 3 trans_id, 1 trans_acc_id, 'transaction detail 3' transdtl from dual 
union 
select 4 trans_id, 3 trans_acc_id, 'transaction detail 4' transdtl from dual 
union 
select 5 trans_id, 5 trans_acc_id, 'transaction detail 5' transdtl from dual 
) 
select * from acc, trans 
where acc.acc_id = trans.trans_acc_id 
and trans.trans_id in (select max(trans_id) from trans inner_trans where 
inner_trans.trans_acc_id = acc.acc_id) 

他們的迴應是:

ACC_ID|ACC_NAME|TRANS_ID|TRANS_ACC_ID|TRANSDTL 
1 |name1 |3 |1 |transaction detail 3 
3 |name3 |4 |3 |transaction detail 4 
+0

此查詢只提取在trans表中至少有一個事務的帳戶。你是否需要也沒有任何交易的賬戶細節? –