PostgreSQL / Oracle => запрос для группировки и подсчета иерархических значений - PullRequest
0 голосов
/ 15 мая 2018

У меня есть эта таблица на PostgreSQL, но я тестирую ее на БД Oracle.Мне нужно извлечь данные подсчета, чтобы проверить, сколько раз начальное и конечное значение повторяется

CREATE TABLE MY_TABLE
(
  KEY    VARCHAR2(100 BYTE),
  ID     NUMBER,
  VALUE  VARCHAR2(2000 BYTE)
);

со следующими значениями:

INSERT INTO my_table VALUES ('Dia-001', 1, 'welcome');
INSERT INTO my_table VALUES ('Dia-002', 1, 'welcome');
INSERT INTO my_table VALUES ('Dia-002', 2, 'condizioni_app1');
INSERT INTO my_table VALUES ('Dia-002', 3, 'condizioni');
INSERT INTO my_table VALUES ('Dia-003', 1, 'welcome');
INSERT INTO my_table VALUES ('Dia-003', 2, 'condizioni_app1');
INSERT INTO my_table VALUES ('Dia-003', 3, 'condizioni_app2');

Я хотел бы получить этот результат

VALUE             NEXT              COUNT
welcome           condizioni_app1   2
condizioni_app1   condizioni        1
condizioni_app1   condizioni_app2   1

Примечание. Если значение в поле KEY одинарное, оно не должно учитываться (например, для KEY 'Dia-001').
Необходимо подсчитать все пары значений.Например, для ключа 'Dia-002' у нас есть пары welcome / condizioni_app1, condizioni_app1 / condizioni (id 1 и 2, 2 и 3).

1 Ответ

0 голосов
/ 15 мая 2018

Один из вариантов - оконная функция Postgres lead :

select  value
,       next_value
,       count(*)
from    (
        select  value
        ,       lead(value) over (partition by key order by id) as next_value
        from    MY_TABLE
        ) sub
where   next_value is not null
group by
        value
,       next_value

Или вы можете использовать самообъединение, чтобы найти следующее значение для того же ключа:

select  t1.value
,       t2.value
,       count(*)
from    MY_TABLE t1
join    MY_TABLE t2
on      t1.KEY = t2.KEY
and     t1.ID = t2.ID - 1
group by
        t1.value
,       t2.value

Оба примера в SQL Fiddle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...