코딩과 업무스킬

[레드시프트] 매 월의 마지막 날짜 계산과 날짜 더하기 빼기

궁금한물고기 2022. 1. 8. 01:35
반응형

아마존 Redshift에서 쿼리를 짜다보면 그 달의 마지막 날을 가져와서 조인하거나 그룹바이 해야하는 경우가 종종 생긴다. 레드시프트는 postgresql 기반으로 만들었지만 포스트그레에서는 달의 마지막날을 가져오려면 날코딩으로 구현할 경우 생각보다 코드 짜기가 까다롭니다. 이런 기능을 하는 날짜 함수를 제공하지 않기 때문이다. 놀랍게도 레드시프트에서는 last_day라는 함수로 자기가 원하는 달의 마지막 날을 계산해올 수 있다. 그리고 이를 이용해서 날짜 더하기 빼기등을 하면 특별한 코딩 없이도 굉장히 파워풀하게 날짜 계산을 할 수 있다.

 

날짜계산

 

월의 마지막 날짜를 계산하는 last_day 함수

사용법은 매우 간단하다. 아마존에서 제공하는 레드시프트 공식 설명문서 에서도 확인할 수 있는데, 아래와 같은 식으로 사용할 수 있다. 여기서 날짜 자리에는 '0000-00-00' 형태의 날짜를 넣어주면 된다. 예를들어 2022-01-08일을 넣으면 last_day함수는 2022-01-31일을 반환할것이다.

select last_day(날짜)

 

레드시프트에서 날짜를 더하고 빼는 방법

날짜를 핸들링하는 여러가지 방법이 있지만, 가장 많이 사용하는 방법은 datediff를 사용하는 방법이다. 아래와 같은 식으로 사용한다. 함수에 3개의 인자를 전달해야 하는데, 첫번째 인자는 interval이라고 생각하면 된다. 그리고 2,3번째로 전달하는 인자의 날짜2-날짜1 이렇게 값이 반환된다(여기서는 interval을 day로 설정했으므로 일단위로 계산된다)

select datediff(day, 날짜1, 날짜2)

 

날짜 함수 응용해보기

마지막으로 마지막 날짜에서 원하는 날짜를 빼서 마지막 날까지 남은 일수를 기준으로 데이터를 정렬하는 코드를 한번 보자. 해당 코드는 레드시프트 공식설명 문서에서 참고했다.

 

레드시프트의 예제코드

마지막 날짜를 가져와서 판매일자와 차이를 구해준 후 이를 기준으로 group by로 묶어서 판매량 합을 확인하는 예제이다. 이런 식으로 날짜 함수를 잘 활용하면 데이터 분석을 매우 손쉽게 처리할 수 있다.

반응형