Oracle 如何从查询中的多行中获取一行并连接另一个表?
我有三张桌子 一,。卡片 CardNo CreateDate 12345678 01-01-15 34567876 01-05-15 45634455 01-05-16 12347689 01-02-15 43215678 01-05-15 87654445 01-05-15 及 2.会计卡 帐号 123456 12345678 123456 34567876 123456 45634455 654321 12347689 654321 43215678 654321 87654445 一个accountno有多个cardno,我希望得到最后创建的cardno,如下所示 AccountNo CardNo CreateDate value 123456 45634455 01-05-16 5000 654321 87654445 01-05-15 6000 需要输出 账户号卡片号创建日期 123456 45634455 01-05-16 654321 87654445 01-05-15 并将此结果集连接到另一个表 3.交易 Id帐户无值 1 123456 5000 2 654321 6000 最终输出如下所示 AccountNo CardNo CreateDate value 123456 45634455 01-05-16 5000 654321 87654445 01-05-15 6000 AccountNo CardNo CreateDate值 123456 45634455 01-05-16 5000 654321 87654445 01-05-15 6000Oracle 如何从查询中的多行中获取一行并连接另一个表?,oracle,plsql,Oracle,Plsql,我有三张桌子 一,。卡片 CardNo CreateDate 12345678 01-01-15 34567876 01-05-15 45634455 01-05-16 12347689 01-02-15 43215678 01-05-15 87654445 01-05-15 及 2.会计卡 帐号 123456 12345678 123456 34567876 123456 45634455 654321 12347689 654321 432156
如何解决这个问题?进行三向联接,并使用行号选择与每个帐户的最大卡号对应的记录
SELECT
AccountNo, CardNo, CreateDate, value
FROM
(
SELECT t1.AccountNo, t2.CardNo, t2.CreateDate, t3.value,
ROW_NUMBER() OVER (PARTITION BY t1.AccountNo ORDER BY t2.CardNo DESC) rn
FROM Account2Card t1
LEFT JOIN Card t2
ON t1.CardNo = t2.CardNo
LEFT JOIN Transaction t3
ON t2.AccountNo = t3.accountno
) t
WHERE
t.rn = 1;
Id accountno value
1 123456 5000
2 654321 6000
AccountNo CardNo CreateDate value
123456 45634455 01-05-16 5000
654321 87654445 01-05-15 6000
SELECT
AccountNo, CardNo, CreateDate, value
FROM
(
SELECT t1.AccountNo, t2.CardNo, t2.CreateDate, t3.value,
ROW_NUMBER() OVER (PARTITION BY t1.AccountNo ORDER BY t2.CardNo DESC) rn
FROM Account2Card t1
LEFT JOIN Card t2
ON t1.CardNo = t2.CardNo
LEFT JOIN Transaction t3
ON t2.AccountNo = t3.accountno
) t
WHERE
t.rn = 1;