0

私は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_TableAccount_NumSerial_NumAccount_TableBill_Table

Bill_Table に Account_Num、Serial_Num と一致する行が複数ある場合。これは、ACC1, 001 of Account_Table2 行の一致の場合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, 0012 回を表示しないテーブルになります。

出力:

ACCOUNT_NUM | SERIAL_NUM | BILL_DATE 
   ACC1          001         Date
   ACC1          001         Date
   ACC2          002         Date

どんな助けでも大歓迎です。

PS: 私が間違ったことの 1 つは、両方のシリアル番号に一致する行のみを比較していることですA.SERIAL_NUM = B.SERIAL_NUM。しかし、この行を削除すると、より多くの行が得られます。

4

2 に答える 2