PostgreSQL - назначать уникальный идентификатор каждой группе записей в зависимости от условия

Я пытаюсь сгруппировать записи таблицы на основе условия, а затем указать в новом столбце простой целочисленный идентификатор для каждой группы, полученной из того места, где выполняется условие.

Я БЫТМСТПCAT_TYPEТЕЛЕГРАММЗЭХЛЕР
12022-05-03 20:52:02325004
22022-05-03 20:51:34325002
32022-05-03 20:51:34325001
42022-05-03 20:51:33325000
52022-05-03 20:41:22324996
62022-05-03 20:41:21324995

Мне нужно присвоить один и тот же идентификатор тем строкам, чей номер TELEGRAMMZAEHLER следует за следующим (например, строки 2 и 3 имеют TZ 5002 и 5001, поэтому они являются последовательными и должны принадлежать одному и тому же идентификатору группы.)

Колонка GRUPPE была бы моим желаемым результатом. Строки со 2 по 4 принадлежат одному и тому же идентификатору группы, но тогда строки 5 и 6 должны иметь другой идентификатор, потому что TZ в строке 5 не следует за TZ в строке 4.

Я БЫТМСТПCAT_TYPEТЕЛЕГРАММЗЭХЛЕРГРУППА
12022-05-03 20:52:023250041
22022-05-03 20:51:343250022
32022-05-03 20:51:343250012
42022-05-03 20:51:333250002
52022-05-03 20:41:223249963
62022-05-03 20:41:213249953

Любые идеи о том, как этого можно достичь на postgreSQL?

Большое спасибо!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем использовать здесь LAG вместе с SUM в качестве аналитической функции:

WITH cte AS (
    SELECT *, CASE WHEN TELEGRAMMZAEHLER =
                        LAG(TELEGRAMMZAEHLER) OVER (ORDER BY TMSTP DESC) - 1
                   THEN 0 ELSE 1 END AS idx
    FROM yourTable
)

SELECT ID, TMSTP, CAT_TYPE, TELEGRAMMZAEHLER,
       SUM(idx) OVER (ORDER BY TMSTP DESC) AS GRUPPE
FROM cte
ORDER BY TMSTP DESC;

Демо

Другие вопросы по теме