SELECT ProgramId,
Subject,
StatusDate
FROM
(
SELECT programs.Id AS ProgramId,
subjects.Name AS Subject,
status.Date AS StatusDate,
status.Id AS StatusId,
ROW_NUMBER() OVER(PARTITION BY programs.Id ORDER BY status.Date DESC, status.Id DESC) AS rn
FROM programs
INNER JOIN status
ON programs.Id=status.ProgramId
INNER JOIN subjects
ON programs.SubjectId=subjects.Id
) AS t1
WHERE rn=1
AND StatusId=3 -- 3 - айдишка статуса 'заблокировано' в справочнике статусов
ORDER BY StatusDate DESC
Это не совсем готовое решение, а скорее повод куда думать