"Merging" grouped rows (column-wise, picking the first non-null value, ordered by another column) I'd like to apologize in advance for the poor title, but I had a hard time trying to describe my problem.

I have a table like this:

+---+--------------+--------------+-------+-------+-------+
|   | RECORD_LEVEL | RECORD_GROUP | COL_A | COL_B | COL_C |
+---+--------------+--------------+-------+-------+-------+
| 1 |            1 | group1       | NULL  | 0     | bar1  |
| 2 |            2 | group1       | foo2  | -1    | bar2  |
| 3 |            2 | group2       | foo3  | NULL  | NULL  |
| 4 |            5 | group2       | foo4  | 5     | bar4  |
| 5 |            1 | group3       | NULL  | 1     | NULL  |
| 6 |            2 | group3       | foo6  | 1     | NULL  |
+---+--------------+--------------+-------+-------+-------+


And I need to group it by RECORD_GROUP, using the first non-NULL value for each column. By 'first', I imply an ORDER BY RECORD_LEVEL ASC. The result I'd like is something like this:

+---+--------------+-------+-------+-------+
|   | RECORD_GROUP | COL_A | COL_B | COL_C |
+---+--------------+-------+-------+-------+
| 1 | group1       | foo2  |     0 | bar1  |
| 2 | group2       | foo3  |     5 | bar4  |
| 3 | group3       | foo6  |     1 | NULL  |
+---+--------------+-------+-------+-------+


I tried to reproduce this scenario in this fiddle: http://rextester.com/UMMP61375

Please, feel free to ask for more information or premises.
You can use the FIRST_VALUE analytic function for this:

select distinct
  record_group,
  first_value(col_a ignore nulls) over
    (partition by record_group order by record_level
      rows between unbounded preceding and unbounded following) as col_a,
  first_value(col_b ignore nulls) over 
    (partition by record_group order by record_level
      rows between unbounded preceding and unbounded following) as col_b,
  first_value(col_c ignore nulls) over
    (partition by record_group order by record_level
      rows between unbounded preceding and unbounded following) as col_c
from
  tbl_record
order by
  record_group
;

RECORD_GROUP         COL_A                     COL_B COL_C              
-------------------- -------------------- ---------- --------------------
group1               foo2                          0 bar1                
group2               foo3                          5 bar4                
group3               foo6                          1  


We find the first value (FIRST_VALUE) for each row, ignore nulls (ignore nulls), for the current record_group "partition/group" (partition by record_group), for the whole "partition/group" (rows between unbounded preceding and unbounded following) based on the order of record_level (order by record_level), and get rid of the duplicate rows with DISTINCT.