with t as (
select 1 as user_no, to_date('20120719 183000', 'YYYYMMDD HH24MISS') as rdate, 'A' as gcode from dual
union all select 2, to_date('20120719 183000', 'YYYYMMDD HH24MISS'), 'A' from dual
union all select 3, to_date('20120719 183000', 'YYYYMMDD HH24MISS'), 'A' from dual
union all select 4, to_date('20120719 183000', 'YYYYMMDD HH24MISS'), 'B' from dual
union all select 5, to_date('20120719 193000', 'YYYYMMDD HH24MISS'), 'B' from dual
union all select 6, to_date('20120719 200000', 'YYYYMMDD HH24MISS'), 'C' from dual
union all select 7, to_date('20120719 193000', 'YYYYMMDD HH24MISS'), 'B' from dual
union all select 8, to_date('20120719 200000', 'YYYYMMDD HH24MISS'), 'C' from dual
union all select 9, to_date('20120719 210000', 'YYYYMMDD HH24MISS'), 'C' from dual
union all select 10, to_date('20120719 223000', 'YYYYMMDD HH24MISS'), 'D' from dual
union all select 11, to_date('20120719 223000', 'YYYYMMDD HH24MISS'), 'D' from dual
union all select 12, to_date('20120719 233000', 'YYYYMMDD HH24MISS'), 'D' from dual
union all select 13, to_date('20120719 223000', 'YYYYMMDD HH24MISS'), 'A' from dual
union all select 14, to_date('20120719 183000', 'YYYYMMDD HH24MISS'), 'A' from dual
union all select 15, to_date('20120719 183000', 'YYYYMMDD HH24MISS'), 'B' from dual
)
select ROW_NUMBER() OVER(PARTITION BY rdate, gcode ORDER BY rdate ASC ) AS orst, t.* from t;
WITH t AS
(
SELECT 1 user_no, TO_DATE('201207191830', 'yyyymmdd hh24mi') rdate, 'A' gcode FROM dual
UNION ALL SELECT 2, TO_DATE('201207191830', 'yyyymmddhh24mi'), 'A' FROM dual
UNION ALL SELECT 3, TO_DATE('201207191830', 'yyyymmddhh24mi'), 'A' FROM dual
UNION ALL SELECT 4, TO_DATE('201207191830', 'yyyymmddhh24mi'), 'B' FROM dual
UNION ALL SELECT 5, TO_DATE('201207191930', 'yyyymmddhh24mi'), 'B' FROM dual
UNION ALL SELECT 6, TO_DATE('201207192000', 'yyyymmddhh24mi'), 'C' FROM dual
UNION ALL SELECT 7, TO_DATE('201207191930', 'yyyymmddhh24mi'), 'B' FROM dual
UNION ALL SELECT 8, TO_DATE('201207192000', 'yyyymmddhh24mi'), 'C' FROM dual
UNION ALL SELECT 9, TO_DATE('201207192100', 'yyyymmddhh24mi'), 'C' FROM dual
UNION ALL SELECT 10, TO_DATE('201207192230', 'yyyymmddhh24mi'), 'D' FROM dual
UNION ALL SELECT 11, TO_DATE('201207192230', 'yyyymmddhh24mi'), 'D' FROM dual
UNION ALL SELECT 12, TO_DATE('201207192330', 'yyyymmddhh24mi'), 'D' FROM dual
UNION ALL SELECT 13, TO_DATE('201207192230', 'yyyymmddhh24mi'), 'A' FROM dual
UNION ALL SELECT 14, TO_DATE('201207191830', 'yyyymmddhh24mi'), 'A' FROM dual
UNION ALL SELECT 15, TO_DATE('201207191830', 'yyyymmddhh24mi'), 'B' FROM dual
)
SELECT user_no, rdate, gcode
, ROW_NUMBER() OVER(PARTITION BY rn1 - rn2, gcode ORDER BY rdate, user_no) rn
FROM (SELECT user_no, rdate, gcode
, ROW_NUMBER() OVER(ORDER BY rdate, gcode, user_no) rn1
, ROW_NUMBER() OVER(PARTITION BY gcode ORDER BY rdate, user_no) rn2
FROM t
)
ORDER BY rdate, gcode, user_no
;
고맙습니다. 저렇게도 할 수 있군요... ( 답변을 보고 한동안 멍하게 있었음 .... )
질문을 올리고, 잔머리로
SELECT ROW_NUMBER() OVER(PARTITION BY rdate, gcode ORDER BY rdate ASC ) AS orst
, case when gcode = LAG( gcode, 1 ) OVER( ORDER BY rdate ASC ) then 1 else 0 end AS orst2
, g.*
from t g;
방식으로도 해보았습니다.