Есть ли какой-нибудь способ найти кумулятивную разницу в улье

#sql #hive

#sql #улей

Вопрос:

У меня есть таблица, в которой есть два столбца, время, ошибки, как показано ниже

#Время #ошибки
00:15:00 100000
00:30:00 100000
00:45:00 100000
01:00:00 100100
01:15:00 100300
01:30:00 100300
01:45:00 100700

Я хочу кумулятивную разницу между ошибками, как показано ниже

#Время #ошибки #кумулятивные_ ошибки
00:15:00 100000 0
00:30:00 100000 0
00:45:00 100000 100
01:00:00 100100 200
01:15:00 100300 0
01:30:00 100300 400
01:45:00 100700

Кто-нибудь предлагает сделать это с помощью оконной функции улья?

Комментарии:

1. это не похоже на кумулятивную ошибку, а просто на ошибку в отношении следующей строки.

Ответ №1:

Вы можете использовать lead() :

 select t.*,
       (lead(errors) over (order by time) - errors) as diff_to_next
from t;
 

В качестве примечания: обычно я бы сформулировал это с помощью lag() , которое представляет собой количество ошибок, начиная с предыдущей строки, а не со следующей строки. Это означает, что в данной строке сумма различий равна значению в этой строке.