#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()
, которое представляет собой количество ошибок, начиная с предыдущей строки, а не со следующей строки. Это означает, что в данной строке сумма различий равна значению в этой строке.