OracleでSQLを実行するためにバックエンドソフトウェアを使用しています。発効日に基づいて最新の行を取得する必要があります。
これがサンプルテーブルです
Table "ACCOUNTS"
Application | Sub_category | Account_Reference | Effective_date
BC_ONLINE | F | ABC1234 | 01-JAN-13
BC_ONLINE | B | ABC2345 | 01-JAN-13
TE_Notice | (NULL) | 1234ABC | 01-JAN-13
TE_Notice | (NULL) | 9876DEF | 01-APR-13
ソフトウェアは、次の2つのパラメーターを渡します。次のSQLを使用した場合、次のアプリケーションでApplicationとSub_category:BC_ONLINEとSub_category:F
select a.Account_Reference
from ACCOUNTS a
where a.Application = 'BC_ONLINE'
and a.Sub_category = 'F'
and a.Effective_date = (select max(b.Effective_date)
from ACCOUNTS b
where b.Effective_date <= sysdate
and b.Application = a.Application
and b.Sub_category = a.Sub_category)
ただし、次のアプリケーションを使用する必要があります:TE_NoticeおよびSub_category:NULL であり、これを使用することはできません
and a.Sub_category = null
それがなければならないので
and a.Sub_category is null
問題はソフトウェアが修正されていることです。max(effective_date)を使用してwhere句でvalueとnullの両方を使用する最良の方法は何ですか?
この方法を試しましたが、うまくいきません
select a.Account_Reference
from ACCOUNTS a
where a.Application = 'TE_Notice'
and (a.Sub_category = '' or a.Sub_category is null)
and a.Effective_date = (select max(b.Effective_date)
from ACCOUNTS b
where b.Effective_date <= sysdate
and b.Application = a.Application
and NVL(b.Sub_category,-1) = NVL(a.Sub_category,-1))
単に01-APR-13の行を返しましたが、 01-JAN-13のEffective_dateの行を取得する必要があります。