Попробуйте это:
/*
WITH MYTABLE (nationalcode, status, changestatusdate) AS
(
VALUES
(123, 1, 20150101)
, (123, 2, 20150301)
, (123, 2, 20150315)
, (123, 3, 20150601)
, (123, 1, 20151201)
, (123, 5, 20160101)
, (123, 5, 20160301)
)
*/
SELECT DISTINCT nationalcode, status
FROM
(
SELECT
T.nationalcode, T.status
, SUM
(
CASE WHEN STATUS = COALESCE
(
MAX(status) OVER (PARTITION BY nationalcode ORDER BY changestatusdate DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
, STATUS
) THEN 0 ELSE 1 END
) OVER (PARTITION BY nationalcode ORDER BY changestatusdate DESC) FLAG
FROM MYTABLE T
)
WHERE FLAG < 2
;