Uit wat ik heb gelezen, neem ik aan dat je alle bedrijven met status 1 binnen je datumbereik wilt hebben. Als dit is wat je wilt, is dat vrij eenvoudig.
De volgende verklaring zou het werk moeten doen:
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
Wat ik deed, was een geneste weergave maken met de laatste status tot het einde van uw datumbereik, dus als de laatste wijziging van een bedrijfsstatus 1 is, moet dit bedrijf worden opgenomen in uw resultaat. We geven niet om wijzigingen na uw datumbereik, dus plaats ik de beperking in de geneste weergave.
Het begin van uw bereik is niet significant voor dit verzoek. Je had waarschijnlijk voor andere doeleinden nodig, om aan andere tafels te kunnen deelnemen.
Ik ben een Oracle-man, dus ik denk dat Ι deze verklaring veel beter zou kunnen maken met Oracle-analyse, maar ik denk dat het een geldige verklaring voor SQL-server zal zijn.