Укажите количество раз, когда столбец изменил значение, основанное на текущих и предыдущих строках
94
6
У меня есть следующий набор результатов.
Product Date Status
123 1/1/2017 Active
123 2/1/2017 Inactive
123 3/1/2017 Active
456 1/1/2017 Active
456 1/2/2017 Active
456 1/3/2017 Inactive
789 1/7/2017 Active
789 1/15/2017 Active
789 1/21/2017 Active
111 1/7/2017 Inactive
111 1/15/2017 Active
111 1/21/2017 Inactive
111 1/23/2017 Active
111 1/31/2017 Inactive
Я хотел бы попытаться определить количество изменений статуса продукта, но каждая строка показывает это число на дату строки. В качестве альтернативы, я мог бы просто показать отчетливое количество статусов для каждого продукта (также в данную дату).
Я предполагаю, что для этого потребуется какая-то функция окна с разделом на продукт и упорядоченным по дате, но мне еще не повезло.
Желаемые результаты будут выглядеть так:
Product Date Status # of Distinct Status # of Status Change
123 1/1/2017 Active 1 0
123 2/1/2017 Inactive 2 1
123 3/1/2017 Active 2 2
456 1/1/2017 Active 1 0
456 1/2/2017 Active 1 0
456 1/3/2017 Inactive 2 1
789 1/7/2017 Active 1 0
789 1/15/2017 Active 1 0
789 1/21/2017 Active 1 0
111 1/7/2017 Inactive 1 0
111 1/15/2017 Active 2 1
111 1/21/2017 Inactive 2 2
111 1/23/2017 Active 2 3
111 1/31/2017 Inactive 2 4
спросил(а)
2018-01-09T23:50:00+03:00
3 года назад
добавить комментарий
пожаловаться
Решение
95
Вы можете сделать это с помощью функций lag
и sum
select id,date,status,
sum(case when prev_status is null or prev_status=status then 0 else 1 end) over(partition by product order by date) as num_of_status_change
from (select id,date,status,lag(status) over(partition by product order by date) as prev_status
from tbl
) t
ответил(а)
2018-01-10T00:02:00+03:00
3 года назад
добавить комментарий
пожаловаться
Ваш ответ
Еще в рубрике
132
Объединение анонимного идентификатора и идентификатора пользователя
60
Как агрегировать событие для денормализации?
73
Как использовать SparkSQL и механизм его выполнения для запроса баз и таблиц Hive без использования какой-либо части механизма выполнения Hive?
111
Неисправность трубопроводов для пошагового копирования кросс-региона DynamoDB