Z toho, co jsem četl, předpokládám, že chcete všechny společnosti, které měly status 1, ve vašem časovém období. Pokud je to to, co chcete, je to docela snadné.
Následující příkaz by měl fungovat:
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
Vytvořil jsem vnořené zobrazení s posledním stavem do konce vašeho časového období, takže pokud je poslední změna stavu společnosti 1, měla by být tato společnost zahrnuta do vašeho výsledku. Nestaráme se o změny po vašem časovém období, proto jsem omezení vložil do vnořeného zobrazení.
Začátek vašeho rozsahu je pro tento požadavek bezvýznamný. Pravděpodobně jste potřebovali pro jiné účely, abyste se připojili k jiným stolům.
Jsem člověk od Oracle, takže si myslím, že bych mohl toto prohlášení udělat mnohem lépe pomocí analytiky Oracle, ale myslím, že to bude platné prohlášení pro SQL server.