๐ŸŒท๐ŸŒผ๋ชจ์—ฌ๋ด์š” ๊ฐœ๋ฐœ์˜์ˆฒ๐ŸŒท๐ŸŒผ

[SQL] ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ณ„ ์ˆœ์œ„ ๋งค๊ธฐ๊ธฐ ๋ณธ๋ฌธ

๊ฐœ๋ฐœ/SQL

[SQL] ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ณ„ ์ˆœ์œ„ ๋งค๊ธฐ๊ธฐ

์š”์ผ์ด 2021. 5. 18. 11:14
๋ฐ˜์‘ํ˜•

์—ฌ๊ธฐ ๋‚ ์งœ๋ณ„๋กœ ์ˆซ์ž๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์จ์ ธ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.(ํ•œ ๋‚ ์งœ์— ๊ฐ™์€ ์ˆซ์ž๋Š” ์—†์Šต๋‹ˆ๋‹ค)

๋ฐ์ดํ„ฐ

SELECT
	A,
	DATE_COLUMN
FROM 
	TABLE
ORDER BY 
	DATE_COLUMN ASC

 

 

 

 

 

 

 

 

 

 

 

 

์ด A ์ปฌ๋Ÿผ์˜ 1๋ฒˆ๋งŒ ์ถ”์ถœํ•˜์—ฌ ์ˆœ๋ฒˆ์„ ๋งค๊ธฐ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

SELECT 
	*,
	CASE WHEN A_TMP = '1' THEN ROW_NUMBER() OVER(PARTITION BY A ORDER BY DATE_COLUMN ASC) END AS RESULT
FROM 
	(
		SELECT
            A,
            DATE_COLUMN,
    		CASE WHEN A = '1' THEN 1 END AS A_TMP	
        FROM 
            TABLE
        ORDER BY 
            DATE_COLUMN ASC
    )
ORDER BY DATE_COLUMN ASC

 

A_TMP๊ฐ€ ์ž„์‹œ๋ณ€์ˆ˜ ์ž…๋‹ˆ๋‹ค. A๊ฐ€ 1์ผ๋•Œ ๋งˆ๋‹ค 1์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ์ž„์‹œ ์ปฌ๋Ÿผ์— ์ €์žฅํ•˜์—ฌ, ์ด ์ž„์‹œ์ปฌ๋Ÿผ์ด 1์ผ๋•Œ A๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ์ˆœ๋ฒˆ์„ ๋งค๊น๋‹ˆ๋‹ค.

 

2. ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ˆœ์œ„ ๋งค๊ธฐ๊ธฐ

์‚ฌ์‹ค ์ด๊ฒŒ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ž์›์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์ œ์ผ ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๊ณ  ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค. 

A๊ฐ€ 1์ผ๋•Œ A๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

SELECT
	A,
	DATE_COLUMN,
	CASE WHEN A = '1' THEN ROW_NUMBER() OVER(PARTITION BY A ORDER BY DATE_COLUMN ASC) END AS RESULT	
FROM 
	TABLE
ORDER BY 
	DATE_COLUMN ASC

 

Comments