Как заполнить одинаковые подряд строки одним значением

У меня есть таблица:

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;
→ Ссылка