๐Ÿ“… 2025-05-22 ์ „๋ฌธ๋ฒ„์ „ ๋‹จ๊ฑด ์กฐํšŒ SQL ์ •๋ฆฌ


๐Ÿ“Œ ๋‹จ๊ฑด ์กฐํšŒ ๋ชฉ์ 

  • ํŠน์ • ์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ์— ๋Œ€ํ•ด ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ ํšจํ•œ ์ตœ์‹  ์ „๋ฌธ๋ฒ„์ „์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•จ
  • ์กฐํšŒ ๊ฒฐ๊ณผ๋กœ ์ „๋ฌธ์ •์˜์‹๋ณ„๊ฐ’๊ณผ ์„œ๋น„์Šค์‹๋ณ„๊ฐ’์„ ๋ฐ˜ํ™˜

๐Ÿ“„ SQL ์˜ˆ์‹œ โ‘  (์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ)

SELECT 
  ์‹ ํ•œ์€๊ธˆ์œต๋ง์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ || ์ „๋ฌธ๋ฒ„์ „๋ฒˆํ˜ธ AS ์‹ ํ•œ์€๊ธˆ์œต๋ง์ •์˜์‹๋ณ„๊ฐ’,
  ์‹ ํ•œ์€๊ธˆ์œต๋ง์„œ๋น„์Šค์‹๋ณ„๊ฐ’
FROM ์ „๋ฌธ๋ฒ„์ „๋‚ด์—ญ
WHERE ์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ = :์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ
  AND ์ „๋ฌธ์ ์šฉ์ผ์ž = (
    SELECT MAX(์ „๋ฌธ์ ์šฉ์ผ์ž)
    FROM ์ „๋ฌธ๋ฒ„์ „๋‚ด์—ญ
    WHERE ์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ = :์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ
      AND ์ „๋ฌธ์ ์šฉ์ผ์ž <= TO_CHAR(SYSDATE, 'YYYYMMDD')
);
  • MAX(์ „๋ฌธ์ ์šฉ์ผ์ž)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋Š˜ ๊ธฐ์ค€ ๊ฐ€์žฅ ์ตœ์‹  ์ ์šฉ์ผ์ž๋ฅผ ์ถ”์ถœ
  • ํ•ด๋‹น ์ผ์ž์— ํ•ด๋‹นํ•˜๋Š” ๋‹จ์ผ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒ

๐Ÿ“„ SQL ์˜ˆ์‹œ โ‘ก (์ •๋ ฌ + FETCH ๋ฐฉ์‹)

SELECT
    ์‹ ํ•œ์€๊ธˆ์œต๋ง์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ || ์ „๋ฌธ๋ฒ„์ „๋ฒˆํ˜ธ AS ์‹ ํ•œ์€๊ธˆ์œต๋ง์ •์˜์‹๋ณ„๊ฐ’,
    ์‹ ํ•œ์€๊ธˆ์œต๋ง์„œ๋น„์Šค์‹๋ณ„๊ฐ’
FROM
    ์ „๋ฌธ๋ฒ„์ „๋‚ด์—ญ
WHERE
    ์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ = :์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ
    AND ์ „๋ฌธ์ ์šฉ์ผ์ž <= TO_CHAR(SYSDATE, 'YYYYMMDD')
ORDER BY
    ์ „๋ฌธ์ ์šฉ์ผ์ž DESC,
    ์ „๋ฌธ๋ฒ„์ „๋ฒˆํ˜ธ DESC
FETCH FIRST 1 ROW ONLY;
  • ORDER BY๋กœ ์ •๋ ฌ ํ›„ FETCH FIRST 1 ROW๋กœ ์ตœ์‹  1๊ฑด ์ถ”์ถœ
  • ์„ฑ๋Šฅ๊ณผ ๊ฐ€๋…์„ฑ ๋ฉด์—์„œ ์‹ค๋ฌด์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋จ

โœ… ์ฐธ๊ณ  ์‚ฌํ•ญ

  • ์ „๋ฌธ์ •์˜์‹๋ณ„๊ฐ’: ์ „๋ฌธ์œ ํ˜•์ฝ”๋“œ + ์ „๋ฌธ๋ฒ„์ „๋ฒˆํ˜ธ๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ฐ’

  • ์ „๋ฌธ์ ์šฉ์ผ์ž๋Š” VARCHAR(8) ์ด๋ฏ€๋กœ ๋‚ ์งœ ๋น„๊ต ์‹œ TO_CHAR(SYSDATE, 'YYYYMMDD') ์‚ฌ์šฉ ํ•„์š”

  • ์œ„ ๋‘ SQL์€ ๊ฐ™์€ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜์ง€๋งŒ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ๋ฐ ๊ฐ€๋…์„ฑ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Œ

๐Ÿง  ์‹ค๋ฌด ํŒ:

  • ์ •๋ ฌ ๋ฐฉ์‹(ORDER BY + FETCH)์€ ์˜ตํ‹ฐ๋งˆ์ด์ €์— ๋”ฐ๋ผ ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Œ

  • ๋ฐ˜๋ฉด MAX() ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์ง๊ด€์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์— ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ