One option uses
greatest() and a
select t.*, case greatest(step_01, step_02, step_03) when step_01 then 'step_01' when step_02 then 'step_02' when step_03 then 'step_03' end as archive_status from mytable t
While this would work for your current problem, I would recommend normalizing your design. Each step should be stored in a separate row rather than as a column, in a structure like
(folder_name, step, status). Then you would use
select distinct on (folder_name) t.* from newtable t order by folder_name, status desc, step
CLICK HERE to find out more related problems solutions.