Pelo que li, suponho que você queira todas as empresas que tiveram o status 1 dentro do seu intervalo de datas. Se é isso que você quer, isso é muito fácil.
A seguinte declaração deve fazer o trabalho:
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
O que fiz foi criar uma visualização aninhada com o último status até o final do seu intervalo de datas, portanto, se a última alteração do status de uma empresa for 1, essa empresa deverá ser incluída no seu resultado. Não nos importamos com alterações após seu período, então coloquei a restrição dentro da visualização aninhada.
O início do seu intervalo é insignificante para esta solicitação. Você provavelmente precisou para outros propósitos, juntar outras tabelas.
Eu sou o cara da Oracle, então acho que Ι poderia fazer essa declaração muito melhor usando o Oracle Analytics, mas acho que será uma declaração válida para o SQL Server.