/*
* 데이터값
*/
col1 col2 col3 reg_dt
========================
A1 B1 C1 2015/01/01
A1 B1 C1 2015/01/02
A1 B2 C1 2015/01/03
A1 B1 C2 2015/01/04
A1 B1 C1 2015/01/05
A1 B1 C1 2015/01/06
/*
* 원하는값
*/
col1 col2 col3 reg_dt group_id
========================
A1 B1 C1 2015/01/01 1
A1 B1 C1 2015/01/02 1
A1 B2 C1 2015/01/03 2
A1 B1 C2 2015/01/04 3
A1 B1 C1 2015/01/05 4
A1 B1 C1 2015/01/06 4
정렬은 데이터값 발생 순으로 정렬하고
GROUP_ID는 이전값이 변경되는 GROUP_ID가 증가하도록 쿼리를 작성하고 싶습니다.
정렬이 데이터값 발생순이라는 말씀은 REG_DT 말씀하시는 건가요?
그런데 REG_DT는 날짜까지만 있고 시간이 없어서 약간 모호한 것 같은데요.. 일단
REG_DT가 동일할 때는 ROWNUM으로 정렬한다고 가정하고 작성해보면..
WITH T AS ( SELECT 'A1' COL1, 'B1' COL2, 'C1' COL3, '2015/01/01' REG_DT FROM DUAL UNION ALL SELECT 'A1' COL1, 'B1' COL2, 'C1' COL3, '2015/01/02' REG_DT FROM DUAL UNION ALL SELECT 'A1' COL1, 'B2' COL2, 'C1' COL3, '2015/01/03' REG_DT FROM DUAL UNION ALL SELECT 'A1' COL1, 'B1' COL2, 'C2' COL3, '2015/01/04' REG_DT FROM DUAL UNION ALL SELECT 'A1' COL1, 'B1' COL2, 'C1' COL3, '2015/01/05' REG_DT FROM DUAL UNION ALL SELECT 'A1' COL1, 'B1' COL2, 'C1' COL3, '2015/01/06' REG_DT FROM DUAL ) SELECT COL1, COL2, COL3, REG_DT, SUM(GRP) OVER(ORDER BY RN) FROM ( SELECT T.*, DECODE(COL1||COL2||COL3 ,LAG(COL1||COL2||COL3) OVER (ORDER BY REG_DT, ROWNUM),0,1) GRP , ROW_NUMBER() OVER(ORDER BY REG_DT, ROWNUM) RN FROM T ) ORDER BY RN