IT/DataBase

[Oracle] ๋‹ฌ๋ ฅ ๋งŒ๋“ค๊ธฐ

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2023. 4. 1.
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์œผ๋กœ ์š”์ผ์— ํ•ด๋‹น๋˜๋Š” ์ˆซ์ž๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌํ•ด์„œ

์›”~์ผ๊นŒ์ง€๋กœ ์„ค์ •ํ•œ๋‹ค.

 

๊ฐœ์ธ ๊ณต๋ถ€ ๋‚ด์šฉ์„ ์˜ฌ๋ฆฌ๋Š” ๊ณต๊ฐ„์ด๋ฏ€๋กœ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ด ๊ฒฝ์šฐ ๋Œ“๊ธ€ ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋Œ“๊ธ€