私は2つのテーブルを持っています
表-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
との両方にとを結合して、Bill_Date
からを取得する必要があります。Bill_Table
Account_Num
Serial_Num
Account_Table
Bill_Table
Bill_Table に Account_Num、Serial_Num と一致する行が複数ある場合。これは、ACC1, 001 of Account_Table
2 行の一致の場合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
2 回を表示しないテーブルになります。
出力:
ACCOUNT_NUM | SERIAL_NUM | BILL_DATE
ACC1 001 Date
ACC1 001 Date
ACC2 002 Date
どんな助けでも大歓迎です。
PS: 私が間違ったことの 1 つは、両方のシリアル番号に一致する行のみを比較していることですA.SERIAL_NUM = B.SERIAL_NUM
。しかし、この行を削除すると、より多くの行が得られます。