[MySQL/MariaDB] with recursive 이번달 모든 날짜 출력

 

특정 테이블에서 월데이터를 일별로 그룹을 지어 각각의 평균이나 합계를 출력 싶을 때

데이터가 1건도 존재하지 않는 날짜의 데이터는 출력되지 않는다

 

재귀호출을 통해서 이번달의 모든 날짜를 출력하거나 특정 패턴으로 변하는 데이터를 row로 각각 출력하고 싶을때

with recursive 구문을 이용하여 임시 테이블을 만들어 주면 되겠다

 

사용법은 대략

첫번째 select 쿼리에서 최초의 값을, 두번째 select 쿼리에서는 변화될 패턴과 조건을 걸어주면 된다

 

예제를 간단히 작성해보면 아래와 같다

 

1. 이번달 날짜를 모두 출력

 - 이번달 1일(전달의 마지막날 + 1일)부터 이번달의 마지막날까지 1씩 증가한다

with recursive T as (
    select last_day(now() - interval 1 month) + interval 1 day as startDate
    union all
    select startDate + interval 1 day from T where startDate < last_day(now())
)
select * from T;

 

2. 더 간단한 예제

 - 1에서 10까지 출력

with recursive T as (
    select 1 as val
    union all
    select val + 1 from T where val < 10
)
select * from T;