Ud fra det, jeg læste, går jeg ud fra, at du vil have alle de virksomheder, der havde status 1, inden for dit datointerval. Hvis det er det, du ønsker, er det ret nemt.
Følgende erklæring burde gøre 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, jeg gjorde, var at oprette en indlejret visning med den sidste status indtil slutningen af dit datointerval, så hvis den sidste ændring af en virksomhedsstatus er 1, skal denne virksomhed inkluderes i dit resultat. Vi er ligeglade med ændringer efter dit datointerval, så jeg sætter begrænsningen i den indlejrede visning.
Begyndelsen af dit interval er ubetydelig for denne anmodning. Du havde sandsynligvis brug for andre formål, at deltage i andre borde.
Jeg er Oracle-fyr, så jeg tror, jeg kunne gøre denne erklæring meget bedre ved at bruge Oracle-analyse, men jeg tror, den vil være en gyldig erklæring til SQL-server.