我有一个基于银行的数据库,每个分支都有一个唯一的分支ID。
我正在尝试创建一个查询,显示每个分支的储蓄帐户的最高余额。每个分支ID只显示一行。
我有这个查询显示储蓄账户的最高余额,但我无法弄清楚如何拥有这个唯一的每个分支ID。
select max(a.balance) as balance, b.bid, c.pname.firstname, c.pname.middleinitial, c.pname.lastname
from brancht b
join accountt a on b.bid=a.bid
join customeraccountt ca on ca.accnum = a.accnum
join customert c on c.custid = ca.custid
where acctype='Savings'
group by b.bid, c.pname.firstname, c.pname.middleinitial, c.pname.lastname
order by balance desc, b.bid
/
此查询的结果将返回:
BALANCE BID PNAME.FIRSTNAME PNAME.MIDDLEINITIAL PNAME.LASTNAME
14050 101 Kornelia J Oconnor
13000 101 Myra D Johnson
9850 105 Lucie M Crosby
9050 105 Simon R Patrick
查询的另一部分是如果可以在同一个查询中显示它们的当前帐户(如果有的话)也会显示其透支限额?
希望这是足够的信息。
答案 0 :(得分:1)
您可以尝试使用ROW_NUMBER函数,如下所示。在子查询中,根据Branch分区的余额为每行分配ROW_NUMBER。具有特定分支的最大余额的行将被分配1,依此类推;然后你只过滤那些有row_number -1的记录;每个分支只有一个记录(最大余额),ROW_NUMBER = 1
select * from
(select balance, b.bid, c.pname.firstname, c.pname.middleinitial, c.pname.lastname,
row_number() over (partion by b.bid order by balance desc) as rn
from brancht b
join accountt a on b.bid=a.bid
join customeraccountt ca on ca.accnum = a.accnum
join customert c on c.custid = ca.custid
where acctype='Savings'
group by b.bid, c.pname.firstname, c.pname.middleinitial, c.pname.lastname
) where rn=1