私が読んだことから、日付範囲内でステータスが 1 のすべての会社が必要であると想定しています。これがあなたの望むものなら、それはとても簡単です。
次のステートメントは、仕事をする必要があります:
SELECT C.*
FROM COMPANY C
LEFT JOIN ( SELECT H.STATUS, H.COMPANY_ID
FROM COMPANYSTATUS H
WHERE H.STATUS_EFFECTIVE_DATE = (SELECT MAX(H1.STATUS_EFFECTIVE_DATE)
FROM COMPANYSTATUS H1
WHERE H1.COMPANY_ID = H.COMPANY_ID
AND H1.STATUS_EFFECTIVE_DATE <= '20171231'
) CH ON CH.COMPANY_ID = C.ID
WHERE ( C.STATUS = 1 AND CH.COMPANY_ID IS NULL ) -- CASE #1 : STATUS = 1 AND NEVER CHANGED (NO HISTORY)
OR H.STATUS = 1
私が行ったことは、日付範囲の終わりまでの最後のステータスでネストされたビューを作成することでした。そのため、会社のステータスの最後の変更が 1 の場合、この会社は結果に含まれるはずです。日付範囲の後の変更は気にしないので、ネストされたビュー内に制限を入れました.
このリクエストでは、範囲の開始は重要ではありません。他のテーブルに参加するために、おそらく他の目的で必要でした.
私は Oracle 担当者なので、Oracle 分析を使用してこのステートメントをさらに改善できると思いますが、SQL サーバーに対しては有効なステートメントになると思います。