| Task Table |  |  |  | 
| Server ID | Action | Task ID | Status | 
| 123 | 43 | 1 | completed | 
| 123 | 43 | 3 | completed | 
| 123 | 43 | 2 | completed | 
| 123 | 43 | 4 | active | 
| 123 | 43 | 5 | active | 
| 123 | 45 | 1 | active | 
| 123 | 45 | 4 | active | 
| 123 | 45 | 3 | active | 
| 123 | 45 | 2 | active | 
| 123 | 45 | 5 | active | 
| 234 | 43 | 5 | active | 
| 234 | 43 | 3 | active | 
| 234 | 43 | 4 | completed | 
| 234 | 43 | 2 | completed | 
| 234 | 43 | 1 | completed | 
|  |  |  |  | 
|  |  |  |  | 
| Task Template |  |  |  | 
| TaskID | TaskPredecessor |  |  | 
| 2 | 1 |  |  | 
| 3 | 2 |  |  | 
| 4 | 2 |  |  | 
| 5 | 4 |  |  | 
| 6 | 5 |  |  | 
|  |  |  |  | 
| Output |  |  |  | 
| Server ID | Action | Task ID | Status | 
| 123 | 43 | 1 | completed | 
| 123 | 43 | 3 | completed | 
| 123 | 43 | 2 | completed | 
| 123 | 43 | 4 | active | 
| 123 | 45 | 1 | active | 
| 234 | 43 | 3 | active | 
| 234 | 43 | 4 | completed | 
| 234 | 43 | 2 | completed | 
| 234 | 43 | 1 | completed | 
 Preface: The query should look at the combination of the ServerID and Action ID pick up the task ID and check if it has a predecessor. If it has a predecessor then check the server action combination with that predecessor ID with status completed or active. If completed then check next.
Output: The output should print the Server action combination along with task ID and status. Constraint: it should print all the completed task and should stop printing at the latest active task.
ASK: Cant seem to get my head around it. Please post a sample query. Note: No use of cursors.
             
            
              
              
              
            
           
          
            
            
              Is this a school assignment?
Assign rownumber in cte and do a selfjoin, so you can compare on current/prevoius status.
             
            
              
              
              
            
           
          
            
            
              This is not a school assignment. I work somewhere. Can you post a a sample example pls.
             
            
              
              
              
            
           
          
            
            
              Something like this (avoiding tasktemplate - don't know your data, so maybe thats not even an option):
with cte
  as (select serverid
            ,[action]
            ,taskid
            ,[status]
            ,row_number() over(partition by serverid
                                           ,[action]
                                   order by taskid
                              )
             as rn
        from task
     )
select serverid
      ,[action]
      ,taskid
      ,[status]
  from cte as a
 where not exists (select 1
                      from cte as b
                    where b.serverid=a.serverid
                      and b.[action]=a.[action]
                      and b.rn<a.rn
                      and b.[status]!='completed'
                  )
 order by serverid
         ,[action]
         ,taskid
;
or this (including tasktemplate):
    ,cte
  as (select a.serverid
            ,a.[action]
            ,a.taskid
            ,a.[status]
                  ,row_number() over(partition by a.serverid
                                                 ,a.[action]
                                         order by a.taskid
                                    )
                   as rn
        from task as a
             left join tasktemplate as b
                     on b.taskid=a.taskid
             left join task as c
                     on c.serverid=a.serverid
                    and c.[action]=a.[action]
                    and c.taskid=b.taskpredecessor
       where b.taskid is null
          or c.[status]='completed'
     )
select serverid
      ,[action]
      ,taskid
      ,[status]
  from cte as a
 where not exists (select 1
                     from cte as b
                    where b.serverid=a.serverid
                      and b.[action]=a.[action]
                      and b.rn<a.rn
                      and b.[status]!='completed'
                  )
 order by serverid
         ,[action]
         ,taskid
;