# 코드1
WITH a AS (
SELECT
*
, LEAD(people) OVER (ORDER BY id) next_one
, LEAD(people, 2) OVER (ORDER BY id) next_two
, LAG(people) OVER (ORDER BY id) prev_one
, LAG(people, 2) OVER (ORDER BY id) prev_two
FROM Stadium
)
SELECT
id
, visit_date
, people
FROM a
WHERE people >= 100 AND next_one >= 100 AND next_two >= 100
OR people >= 100 AND prev_one >= 100 AND prev_two >= 100
OR people >= 100 AND next_one >= 100 AND prev_one >= 100
# 코드 2
WITH cte AS (
SELECT
*
, id - ROW_NUMBER() OVER (ORDER BY id) grp
FROM Stadium
WHERE people >= 100
)
SELECT
id
, visit_date
, people
FROM cte
WHERE grp IN (
SELECT
grp
FROM cte
GROUP BY grp
HAVING COUNT(*) >= 3
)
비고 : LEAD() 함수와 LAG() 함수를 사용해서 이전 데이터들을 추출한 후 100보다 큰 3회 이상을 추출하는 것을 만들었다. 두번째 코드가 더 좋은 이유는 그루핑을 만든 것이다. HAVING절만 수정하면 조건에 쉽게 변동을 줄 수 있고 id - ROW_NUMBER()는 연속된 구간을 하나의 그룹으로 만들 때 자주 사용되는 거라고 하니 알아두자.