Executando total sobre o grupo de repetição por itens com base no tempo no Oracle SQL

Meu primeiro post, então tenha paciência comigo. Eu quero somar com base em um valor que é dividido por datas, mas quero apenas a soma para as datas, não para o grupo por item no total. Estão trabalhando nisso há dias, tentando evitar o uso de um cursor, mas talvez seja necessário.

Aqui está um exemplo dos dados que estou vendo. BTW, isso está no 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

O resultado final deve ficar assim:

 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

Consegui obter a Chave para preencher os Nulos. A chave nem sempre é inserida, mas assume-se o valor até que seja realmente alterada.

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;

Mas quando tento obter apenas um total, ele soma a chave mesmo com os intervalos. Não consigo descobrir como fazê-lo funcionar com a chave. Aqui está minha melhor chance, que não é muito boa e não funciona corretamente.

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;

Qualquer ajuda seria apreciada. Talvez usando o cursor seja o único caminho.

Corresponder dados de amostra.

questionAnswers(3)

yourAnswerToTheQuestion