我有兩個表。帳戶表和交易表。我想列出所有賬戶與他們的最後交易。由於沒有事務的情況下可能存在需要左連接。SQL左外部加入一對多行
我有類似
select * from Account ac left join Transaction trans on ac.id = trans.acc_id
但是,這將列出所有的交易數據。不知道如何修改它。
我有兩個表。帳戶表和交易表。我想列出所有賬戶與他們的最後交易。由於沒有事務的情況下可能存在需要左連接。SQL左外部加入一對多行
我有類似
select * from Account ac left join Transaction trans on ac.id = trans.acc_id
但是,這將列出所有的交易數據。不知道如何修改它。
第一左連接讓你帳戶的最後\最大事務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
沿着只需使用一個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
的列..
由於我們使用group by by ac.id,因此我們無法在此查詢中查找其他列,例如交易金額等。我們可以使用max func獲取tran id/date。 –
@AkhilKNambiar:現在檢查...編輯答案 –
不......只是一個問題,當我把數量。有時沒有交易,那麼該數據沒有列出 –
您可以通過連接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
無法取得交易金額等字段,因爲使用了group by。 –
請添加關於您提供的單線解決方案關鍵方面的說明。 – Rachcha
@AkhilKNambiar:交易金額等交易表的一個字段? –
這是否接近你在期待什麼?
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
此查詢只提取在trans表中至少有一個事務的帳戶。你是否需要也沒有任何交易的賬戶細節? –
什麼字段的交易將被用來知道這是最後一個? – geoand
交易表中'id'字段的@geo和max值。 –