Here is my solution:
declare @test-2 table(
PatientNumber int,
DischargeDate date
);
insert into @test-2
values (1,'2015-11-30'),
(1,'2016-01-01'),
(1,'2016-03-04'),
(1,'2016-05-08'),
(2,'2015-12-02'),
(2,'2015-12-19'),
(2,'2016-02-24'),
(2,'2016-05-28'),
(2,'2016-07-30');
select * from @test-2;
with basedata as (
select
PatientNumber,
max(DischargeDate) DischargeDate
from
group by
PatientNumber
)
select
bd.PatientNumber,
ca1.DischargeDate
from
basedata bd
cross apply (select DischargeDate from @test-2 t1 where bd.PatientNumber = t1.PatientNumber and t1.DischargeDate > dateadd(month,-3,bd.DischargeDate)) ca1;