์ ์ด๋ ฅ์ ์ ๋ถ ์ด๋ ฅ์ผ๋ก ์ ํํด๋ณด์.
์์ ๋ฅผ ์ํด ์๋์ ๊ฐ์ด ํ ์ด๋ธ์ ์์ฑํ์. ๋ณ๊ฒฝ ์์ ์ ์ด๋ ฅ์ด ๋ฐ์ํ๋ ์ ์ด๋ ฅ ํ ์ด๋ธ์ด๋ค.
1 2 3 4 5 6 7 8 9 |
-- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (cd VARCHAR2(1), dt DATE , vl NUMBER); INSERT INTO t1 VALUES ( 'A' , DATE '2050-01-01' , 1); INSERT INTO t1 VALUES ( 'A' , DATE '2050-01-06' , 2); INSERT INTO t1 VALUES ( 'A' , DATE '2050-01-16' , 1); INSERT INTO t1 VALUES ( 'A' , DATE '2050-01-31' , 3); COMMIT ; |
LEAD ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ถ ์ด๋ ฅ์ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
-- 2 SELECT cd, dt AS dt_bg , LEAD (dt - 1, 1, DATE '9999-12-31' ) OVER ( ORDER BY dt) AS dt_ed, vl FROM t1 ORDER BY 1; CD DT_BG DT_ED VL -- ---------- ---------- -- A 2050-01-01 2050-01-05 1 A 2050-01-31 9999-12-31 3 A 2050-01-16 2050-01-30 1 A 2050-01-06 2050-01-15 2 4 ํ์ด ์ ํ๋์์ต๋๋ค. |
๋ค์ ์์ ๋ฅผ ์ํด ์๋์ ๊ฐ์ด ํ ์ด๋ธ์ ์์ฑํ์. ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ ์์ด ์๋ณ๋ก ์์ฑ๋๋ ์ ์ด๋ ฅ ํ ์ด๋ธ์ด๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
-- 3 DROP TABLE t1 PURGE; CREATE TABLE t1 (cd VARCHAR2(1), ym VARCHAR2(6), vl NUMBER); INSERT INTO t1 VALUES ( 'A' , '205001' , 1); INSERT INTO t1 VALUES ( 'A' , '205002' , 1); INSERT INTO t1 VALUES ( 'A' , '205003' , 2); INSERT INTO t1 VALUES ( 'A' , '205004' , 2); INSERT INTO t1 VALUES ( 'A' , '205005' , 2); INSERT INTO t1 VALUES ( 'A' , '205006' , 1); INSERT INTO t1 VALUES ( 'A' , '205007' , 1); INSERT INTO t1 VALUES ( 'A' , '205008' , 1); INSERT INTO t1 VALUES ( 'A' , '205009' , 1); INSERT INTO t1 VALUES ( 'A' , '205010' , 3); INSERT INTO t1 VALUES ( 'A' , '205011' , 3); INSERT INTO t1 VALUES ( 'A' , '205012' , 3); COMMIT ; |
์๋ ์ฟผ๋ฆฌ๋ก ์ ๋ถ ์ด๋ ฅ์ ์์ฑํ ์ ์๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
-- 4 SELECT cd, MIN (ym) AS ym_bg , CASE WHEN MAX (r1) = MAX (cn) THEN '999912' ELSE MAX (ym) END AS ym_ed, vl FROM ( SELECT a.* , COUNT (*) OVER (PARTITION BY a.cd) AS cn , ROW_NUMBER () OVER (PARTITION BY a.cd ORDER BY a.ym) AS r1 , ROW_NUMBER () OVER (PARTITION BY a.cd, a.vl ORDER BY a.ym) AS r2 FROM t1 a) GROUP BY cd, vl, r1 - r2 ORDER BY 1, 2; CD YM_BG YM_ED VL -- ------ ------ -- A 205001 205002 1 A 205003 205005 2 A 205006 205009 1 A 205010 999912 3 4 ํ์ด ์ ํ๋์์ต๋๋ค. |
'Oracle > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ ๋ง์คํน (0) | 2012.04.30 |
---|---|
๋ค์ค ํ์ ๋ฌธ์์ด๋ก ์ง๊ณ (0) | 2012.04.16 |
๊ตฌ๋ถ์ ํฌํจ ๊ฐ์ ํ์ผ๋ก ๋ถ๋ฆฌ (0) | 2012.04.13 |
์ฐ์๋ ๊ณต๋ฐฑ์ ํ๋์ ๊ณต๋ฐฑ์ผ๋ก ๋ณ๊ฒฝ (0) | 2012.04.12 |
์ฐ์ ์์น ๊ตฌ๊ฐ ์กฐํ (0) | 2012.04.10 |