반응형
[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;
끝
반응형
'개발 > DB' 카테고리의 다른 글
도로교통공단 운전면허 필기 학과시험 문제은행 DB를 드디어 만들었다 (8) | 2019.10.29 |
---|---|
[MySQL/MariaDB] 귀찮은 쿼리 한번에 생성하기 (SELECT, UPDATE, INSERT, DELETE) (0) | 2018.12.14 |