Oracle 如何从查询中的多行中获取一行并连接另一个表?

Oracle 如何从查询中的多行中获取一行并连接另一个表?,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

我有三张桌子

一,。卡片

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 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;
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;