我有两个表。帐户表和交易表。我想列出所有账户与他们的最后交易。由于没有事务的情况下可能存在需要左连接。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值。 –