WITH first_day AS (
SELECT TRUNC(SYSDATE,'MM') AS first_day
FROM dual
),cal AS (
SELECT TO_CHAR(first_day + LEVEL -1,'D') ์์ผ_์ซ์
, TO_CHAR(first_day + LEVEL -1,'MM-DD') ์์ผ
, TO_CHAR(first_day + LEVEL -1,'IW') ์ฃผ์ฐจ
FROM first_day
CONNECT BY first_day + LEVEL -1 <= LAST_DAY(SYSDATE)
)
SELECT COUNT(*) OVER(ORDER BY cal.์ฃผ์ฐจ) ์ฃผ์ฐจ -- ์ต์
, min(DECODE(cal.์์ผ_์ซ์,2,cal.์์ผ)) ์์์ผ
, min(DECODE(cal.์์ผ_์ซ์,3,cal.์์ผ)) ํ์์ผ
, min(DECODE(cal.์์ผ_์ซ์,4,cal.์์ผ)) ์์์ผ
, min(DECODE(cal.์์ผ_์ซ์,5,cal.์์ผ)) ๋ชฉ์์ผ
, min(DECODE(cal.์์ผ_์ซ์,6,cal.์์ผ)) ๊ธ์์ผ
, min(DECODE(cal.์์ผ_์ซ์,7,cal.์์ผ)) ํ ์์ผ
, min(DECODE(cal.์์ผ_์ซ์,1,cal.์์ผ)) ์ผ์์ผ
FROM cal
GROUP BY cal.์ฃผ์ฐจ
;
๋ฌ๋ ฅ ๋ง๋ค ๋ ํ์ํ ๋ฐ์ดํฐ
ํ์ฃผ์ ์์ผ์ ์ซ์๋ก ๋ํ๋ธ ๋ฐ์ดํฐ(์ผ์์ผ(1) ~ ํ ์์ผ(7))
SELECT TO_CHAR(SYSDATE,'D') FROM dual;
๋ฌ๋ ฅ์ ํ์ํ ์์ผ
SELECT TO_CHAR(SYSDATE,'MM-DD') FROM dual;
GROUP BY ํ๊ธฐ ์ํ ์ฃผ์ฐจ(ํด๋น ์ผ์ด ๋ช์ฃผ์ ํด๋นํ๋์ง)
SELECT TO_CHAR(SYSDATE,'IW') FROM dual;
์ต์ ์ 3๊ฐ์ง ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ฌ๋ ฅ์ ๋ง๋ค ์ ์๋ค.
๋จผ์ ์์์ผ์ ๊ตฌํ ๋ค LAST_DAY๋ก ์์ ์ ์ผ ๋ง์ง๋ง ๋ ๊น์ง ๋ฐ๋ณตํ ๋ค์
์์ผ์ ์ซ์๋ก ๋ํ๋ธ ๋ฐ์ดํฐ, ์์ผ, ์ฃผ์ฐจ๋ฅผ ์กฐํํ๋ค.
๊ทธ ํ ์ฃผ์ฐจ๋ก GROUP BY๋ฅผ ํด์ OVER(ORDER BY ์ฃผ์ฐจ)๋ฅผ ํด์ 1~5๊น์ง๋ก ์ ๋ ฌํ๋ค.
๊ทธ ํ MIN()์ผ๋ก ์์ผ์ ์ต์๊ฐ์ ๋ฝ๋ CASE WHEN์ผ๋ก ์์ผ์ ํด๋น๋๋ ์ซ์๋ก ๋ถ๊ธฐ ์ฒ๋ฆฌํด์
์~์ผ๊น์ง๋ก ์ค์ ํ๋ค.

๊ฐ์ธ ๊ณต๋ถ ๋ด์ฉ์ ์ฌ๋ฆฌ๋ ๊ณต๊ฐ์ด๋ฏ๋ก ํ๋ฆฐ ๋ด์ฉ์ด ์์ ์ ์์ผ๋ ์ด ๊ฒฝ์ฐ ๋๊ธ ๋ถํ ๋๋ฆฝ๋๋ค.
'IT > DataBase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Oracle] ํด๋น์๋ง์ผ ~ ์ต์ ๋ง์ผ๊น์ง ์กฐํ (0) | 2023.05.30 |
|---|---|
| [Oracle] ์ฌ๊ท ๋ณต์ฌ (0) | 2023.05.07 |
| [SQL] update์์ case when์ ์ฌ์ฉ (0) | 2023.03.04 |
| [Oracle]ORACLE ๊ณ์ธตํ ์ฟผ๋ฆฌ (0) | 2022.11.29 |
| [Oracle]ORACLE 12C SQL์ ์ถ๊ฐ๋ ์๋ก์ด ๊ธฐ๋ฅ (0) | 2022.11.29 |
๋๊ธ