我有两张桌子
表 1:Account_Table
Account_Num | Serial_Num | Transaction_Date | Balance | Frequency
ACC1 001 Date1 0 f1
ACC1 002 Date2 1 f2
ACC1 003 Date3 2 f3
表 2:Bill_Table
Account_Num | Serial_Num | Version_Num | Bill_Date
ACC1 001 1 Date1 (say)
ACC1 002 1 Date2
ACC1 001 1 Date3
我需要通过加入and来获得Bill_Date
from和。Bill_Table
Account_Num
Serial_Num
Account_Table
Bill_Table
如果 Bill_Table 与 Account_Num、Serial_Num 匹配的行不止一行。这是ACC1, 001 of Account_Table
与两行匹配的情况,ACC1, 001 of Bill_Table
然后我需要获取相应 Account_Num、Serial_Num 组合的最大版本号并返回该行的 Bill_Date。
这是一个特殊情况,ACC1、001 组合的版本号相同,所以我需要获取TOP 1
(即 ROWNUM = 1)
示例:Account_Table 有 3 行。现在我的输出应该是
预期结果:
Account_Num | Serial_Num | Bill_Date
ACC1 001 Date
ACC1 002 Date
ACC1 003 null
我试过的查询是,
SELECT
A.ACCOUNT_NUM,
A.SERIAL_NUM,
B.BILL_DATE
FROM ACCOUNT_TABLE A, BILL_TABLE B WHERE
A.ACCOUNT_NUM = 'ACC1' AND
B.ACCOUNT_NUM = 'ACC1' AND
A.SERIAL_NUM = B.SERIAL_NUM AND
B.VERSION_NUM = (SELECT MAX (BIV.VERSION_NUM) FROM BILL_TABLE BIV
WHERE BIV.ACCOUNT_NUM = 'ACC1'
AND BIV.SERIAL_NUM = B.SERIAL_NUM
);
但是这个查询会导致一个表没有显示我的ACC1, 003
组合和ACC1, 001
两次。
输出:
ACCOUNT_NUM | SERIAL_NUM | BILL_DATE
ACC1 001 Date
ACC1 001 Date
ACC2 002 Date
任何帮助将不胜感激。
PS:我做错的一件事是我只比较与两个序列号匹配的行A.SERIAL_NUM = B.SERIAL_NUM
。但是如果我删除这条线,那么我会得到更多的行。