Как заполнить одинаковые подряд строки одним значением
У меня есть таблица:
CREATE TABLE table_name (`Time` TIMESTAMP, Text string, Nm int);
insert into table table_name values ('2021-10-10 12:11:43', 'a', 1);
insert into table table_name values ('2021-10-10 12:11:43', 'a', 2);
insert into table table_name values ('2021-10-10 12:11:43', 'b', 3);
insert into table table_name values ('2021-10-10 12:13:12', 'a', 4);
insert into table table_name values ('2021-10-10 12:13:13', 'a', 5);
insert into table table_name values ('2021-10-10 12:13:13', 'a', 6);
insert into table table_name values ('2021-10-10 12:13:13', 'c', 7);
insert into table table_name values ('2021-10-10 12:13:17', 'c', 8);
Time Text Nm
2021-10-10 12:11:43 a 1
2021-10-10 12:11:43 a 2
2021-10-10 12:11:43 b 3
2021-10-10 12:13:12 a 4
2021-10-10 12:13:13 a 5
2021-10-10 12:13:13 a 6
2021-10-10 12:13:13 c 7
2021-10-10 12:13:17 c 8
Я хочу получить таблицу:
Time Text Nm Value
2021-10-10 12:11:43 a 1 1
2021-10-10 12:11:43 a 2 1
2021-10-10 12:11:43 b 3 2
2021-10-10 12:13:12 a 4 3
2021-10-10 12:13:13 a 5 3
2021-10-10 12:13:13 a 6 3
2021-10-10 12:13:13 c 7 4
2021-10-10 12:13:17 c 8 4
Возможно уже есть готовая функция, позволяющая сделать это быстро? Использую Hive или Impala.
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
WITH cte AS (
SELECT *, CASE WHEN `Text` = LAG(`Text`) OVER (ORDER BY Nm)
THEN 0
ELSE 1
END value_changed
FROM table_name
)
SELECT *, SUM(value_changed) OVER (ORDER BY Nm)
FROM cte;