|
其实小改改即可, 代码如下
SQL> WITH T AS (
2 SELECT 100 AS ID, 1 AS SEQ FROM DUAL
3 UNION ALL
4 SELECT 100 AS ID, 2 AS SEQ FROM DUAL
5 UNION ALL
6 SELECT 100 AS ID, 3 AS SEQ FROM DUAL
7 UNION ALL
8 SELECT 200 AS ID, 1 AS SEQ FROM DUAL
9 UNION ALL
10 SELECT 200 AS ID, 2 AS SEQ FROM DUAL
11 UNION ALL
12 SELECT 200 AS ID, 4 AS SEQ FROM DUAL
13 UNION ALL
14 SELECT 300 AS ID, 1 AS SEQ FROM DUAL
15 UNION ALL
16 SELECT 300 AS ID, 2 AS SEQ FROM DUAL
17 UNION ALL
18 SELECT 300 AS ID, 1 AS SEQ FROM DUAL
19 union all
20 SELECT 800 AS ID, 1 AS SEQ FROM DUAL
21 UNION ALL
22 SELECT 800 AS ID, 2 AS SEQ FROM DUAL
23 UNION ALL
24 SELECT 800 AS ID, 2 AS SEQ FROM DUAL
25 UNION ALL
26 SELECT 800 AS ID, 5 AS SEQ FROM DUAL
27 UNION ALL
28 SELECT 800 AS ID, 5 AS SEQ FROM DUAL)
29 select id,
30 seq
31 from
32 (select id,
33 seq,
34 sum(diff) over(partition by id) diff
35 from
36 (select id,
37 seq,
38 abs(seq - row_number() over(partition by id order by seq)) diff
39 from t))
40 where diff <> 0;
ID SEQ
---------- ----------
200 1
200 2
200 4
300 1
300 2
300 1
800 1
800 2
800 5
800 2
800 5
11 rows selected
SQL>
|
|