PostgreSQL/Oracle=>;查询以对分层值进行分组和计数

PostgreSQL/Oracle=>;查询以对分层值进行分组和计数,sql,oracle,postgresql,Sql,Oracle,Postgresql,我在PostgreSQL上有这个表,但我在Oracle DB上测试它。 我需要提取计数数据,以检查开始和结束的次数 值会自动重复 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

我在PostgreSQL上有这个表,但我在Oracle DB上测试它。 我需要提取计数数据,以检查开始和结束的次数 值会自动重复

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
注意:如果键字段中的值为单值,则不应计算 (图例“Dia-001”的示例)。
必须对所有值对进行计数。例如,我们有“Dia-002”键 配对欢迎/condizioni_app1,condizioni_app1/condizioni(id 1和2,2和 3) .

一个选项是Postgres':

也可以使用自联接查找同一键的下一个值:

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

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