• 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

    @test-2

    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;