Av vad jag läst antar jag att du vill ha alla företag som hade status 1 inom ditt datumintervall. Om det här är vad du vill är det ganska enkelt.
Följande uttalande bör göra jobbet :
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
Det jag gjorde var att skapa en kapslad vy med den senaste statusen fram till slutet av ditt datumintervall, så om den senaste ändringen av en företagsstatus är 1 så ska detta företag inkluderas i ditt resultat. Vi bryr oss inte om ändringar efter ditt datumintervall, så jag lägger in begränsningen i den kapslade vyn.
Början av ditt intervall är obetydlig för denna begäran. Du behövde förmodligen för andra ändamål, att gå med i andra bord.
Jag är Oracle-kille, så jag tror att jag skulle kunna göra detta uttalande mycket bättre med Oracle-analys, men jag tror att det kommer att vara ett giltigt uttalande för SQL-server.