1. MySQL 이라서 오류가 안나는 부분이 있네요.
- 원래대로라면 a.month 가 Group By 구문에 포함되어야 하구요.
2. id 자체가 유니크한걸로 보이네요.
- 월의 숫자를 의미하는것으로 판단 되구요
- ORDER BY id, season, month 는 ORDER BY id 만 해도 되구요.
- a.rn >= b.rn 은 굳이 rn 이 필요 없이 a.id >= b.id 해도 되겠네요.
3. Case 문의 모호하네요.
- Then 절엔 대입식이 오고 Else 절엔 변수만 달랑 왔네요.
- 양쪽의 형식을 맞춰줘야 할 듯 하네요.
4. 1번과 3번의 모호성 때문에 쿼리 결과가 예측하지 못한 방향으로 흘러간게 아닐까? 생각되는데요.
- MySQL 은 모호하게 작성된 부분도 오류 없이 결과가 나오는게 신기할 따름입니다.
- 에러가 나면 차라리 나을 텐데요.
- 모호성을 제거해 보세요.
5. 기타사항으로는 시즌의 첫 시작을 뽑는거라면?
- 겨울의 시작은 1월이 아니라 12월이죠.
- 12월을 1월의 앞에 위치시키려면 id를 0으로 변형시켜야 할 듯.
-- 변수를 사용한다면? 굳이 Self Join 을 할 이유가 없죠. SET @rn := 0, @fv := '', @season := ''; SELECT id, season, month , @rn := CASE @season WHEN season THEN @rn+1 ELSE 1 END AS rn , @fv := CASE @rn WHEN 1 THEN month ELSE @fv END AS first_value , @season := season FROM (SELECT * FROM test ORDER BY id%12) a ; -- 변수 사용 없이 풀어 봤습니다. SELECT a.id, a.season, a.month , COUNT(*) rn , SUBSTRING(MIN(CONCAT(LPAD(b.id%12, 2, '0'), b.month)), 3) x FROM test a INNER JOIN test b ON a.season = b.season AND a.id%12 >= b.id%12 GROUP BY a.id, a.season, a.month ;