Total acumulado sobre el grupo repetitivo por elementos según el tiempo en Oracle SQL

Mi primer post, así que tengan paciencia conmigo. Quiero sumar en función de un valor dividido por fechas, pero solo quiero la suma de las fechas, no del grupo por artículo en total. He estado trabajando en esto durante días, tratando de evitar usar un cursor, pero es posible que tenga que hacerlo.

Aquí hay un ejemplo de los datos que estoy viendo. Por cierto, esto está en Oracle 11g.

 Key     Time               Amt
------ ------------------ ------
 Null    1-1-2016  00:00    50
 Null    1-1-2016  02:00    50
 Key1    1-1-2016  04:00    30
 Null    1-1-2016  06:00    30
 Null    1-1-2016  08:00    30
 Key2    1-1-2016  10:00    40
 Null    1-1-2016  12:00    40
 Key1    1-1-2016  14:00    30
 Null    1-2-2016  00:00    30
 Key2    1-2-2016  02:00    35

El resultado final debería verse así:

 Key    Start            Stop             Amt
------ ---------------- ---------------- -----
 Null   1-1-2016 00:00   1-1-2016 02:00   100
 Key1   1-1-2016 04:00   1-1-2016 08:00    90
 Key2   1-1-2016 10:00   1-1-2016 12:00    80
 Key1   1-1-2016 14:00   1-2-2016 00:00    60
 key2   1-2-2016 02:00   1-2-2016 02:00    35

He podido obtener la Clave para completar los Nulos. La clave no siempre se ingresa pero se supone que es el valor hasta que realmente se cambia.

SELECT key ,time ,amt
FROM (
    SELECT DISTINCT amt, time, 
        ,last_value(amt ignore nulls) OVER (
            ORDER BY time
            ) key
    FROM sample
    ORDER BY time, amt
    )
WHERE amt > 0
ORDER BY time, key NULLS first;

Pero cuando trato de obtener solo un total acumulado, suma la clave incluso con los descansos. No puedo entender cómo hacer que se rompa la tecla. Aquí está mi mejor oportunidad, que no es muy buena y no funciona correctamente.

SELECT key,time, amt 
     , sum(amt) OVER (PARTITION BY key ORDER BY time) AS running_total
  FROM (SELECT key, time, amt
          FROM (SELECT DISTINCT
                         amt,
                         time, 
                         last_value(amt ignore nulls) OVER (ORDER BY time) key
                  FROM sample
                 ORDER BY time, amt
               )
         WHERE amt > 0
         ORDER BY time, key NULLS first
       )
ORDER BY time, key NULLS first;

Cualquier ayuda sería apreciada. Quizás usar el cursor es la única forma.

Emparejar datos de muestra.

Respuestas a la pregunta(3)

Su respuesta a la pregunta