item_ids 집합을 기반으로 group_ids를 만들려고합니다. item_ids가 단일 그룹의 일부임을 나타내는 유일한 사실은 item_ids가 순차적이라는 사실입니다. 예를 들어, 아래의 처음 두 열을 기반으로, 내가 원하는 출력이 3 번째 :시퀀스를 사용하여 그룹 ID 생성
item item_id group_id
ABC 282 2
ABC 283 2
ABC 284 2
ABC 285 2
ABC 051 3
ABC 052 3
ABC 189 4
ABC 231 5
ABC 232 5
ABC 233 5
ABC 234 5
ABC 247 6
ABC 248 6
ABC 249 6
ABC 250 6
ABC 091 7
ABC 092 7
GROUP_ID가 반드시 순차적 자체가 될 필요가 없습니다, 그것은 단지 고유해야합니다. 나는 다음과 같은 코드로이 시도 :
create sequence seq
start with 1
minvalue 1
increment by 1
cache 20;
select seq.nextval from dual; --to initialize the sequence
select
item,
item_id,
case when diff = 1 then seq.currval else seq.nextval end group_id
from
(
select
item,
item_id,
(id - lag(id, 1, 0) over (order by 1) diff
from
(
select
item,
item_id
from
table
)
);
그러나 다음과 같은 출력을 얻을 :
item item_id group_id
ABC 282 2
ABC 283 3
ABC 284 4
ABC 285 5
ABC 051 6
ABC 052 7
ABC 189 8
ABC 231 9
ABC 232 10
ABC 233 11
ABC 234 12
ABC 247 13
ABC 248 14
ABC 249 15
ABC 250 16
ABC 091 17
ABC 092 18
문제의 원인을 찾고, 내 솔루션은 수상 이유를 자세히 설명 사용자 ShannonSeverance에 의한 excellent explanation 발견 일하지 마라. 그러나 앞으로 나아갈 방법에 대한 제안은하지 않았다.
누구에게 아이디어가 있습니까?