Q:

A way to only select rows that indicate progression, and ignore rows that indicate recovery?

I have a dataset with thousands of patients that include their ID and their disease stage over time. The data is complicated because there are patients that get worse, then recover, then get worse again. I would like to only select rows from a patient that indicate disease progression. 
For example, ID 1 progresses from 3 > 4, then recovers back to stage 1 before worsening again to stage 5. How can I ignore rows that indicate recovery, and only keep rows that indicate progression over time? Is this even possible using SQL? Thank you in advance!
What data looks like:
ID   stage_date  disease_stage
1    1-JAN-15         3
1    3-JAN-15         4
1    6-JAN-15         1
1    9-JAN-15         5
1    10-JAN-15        1

What I want:
ID   stage_date  disease_stage
1    1-JAN-15         3
1    3-JAN-15         4
1    9-JAN-15         5

A:

If I understand correctly, you want the rows that match the cumulative maximum:
select t.*
from (select t.*,
             max(disease_stage) over (partition by id order by disease_stage) as max_running_disease_stage
      from t
     ) t
where max_running_disease_stage = disease_stage;

This will keep ties.  If you don't want ties:
select t.*
from (select t.*,
             max(disease_stage) over (partition by id 
                                      order by stage_date
                                      rows between unbounded preceding and 1 preceding
                                     ) as max_running_disease_stage
      from t
     ) t
where max_running_disease_stage is null or
      disease_stage > max_running_disease_stage;

