MySQL에서 NOW() 함수와 INTERVAL 키워드를 활용하면 현재 날짜를 기준으로 지난 3일 이내에 해당하는 레코드만 조회하고, 그 합계를 손쉽게 계산할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable
(
ProductAmount int,
PurchaseDate datetime
);
Query OK, 0 rows affected (0.94 sec)
참고: 현재 날짜가 2019-09-15라고 가정하겠습니다.
2. 샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 여러 레코드를 추가합니다.
mysql> insert into DemoTable values(567,'2019-09-10');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(1347,'2019-09-14');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(2033,'2019-09-13');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(1256,'2019-09-11');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(1000,'2019-09-16');
Query OK, 1 row affected (0.14 sec)
3. 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------------+---------------------+
| ProductAmount | PurchaseDate |
+---------------+---------------------+
| 567 | 2019-09-10 00:00:00 |
| 1347 | 2019-09-14 00:00:00 |
| 2033 | 2019-09-13 00:00:00 |
| 1256 | 2019-09-11 00:00:00 |
| 1000 | 2019-09-16 00:00:00 |
+---------------+---------------------+
5 rows in set (0.00 sec)
4. NOW() 함수로 최근 3일 이내 레코드 합계 구하기
다음은 NOW() 함수를 활용해 현재 시점으로부터 3일 이내의 레코드만 필터링한 뒤, ProductAmount의 합계를 구하는 쿼리입니다.
mysql> select sum(ProductAmount) from DemoTable
where PurchaseDate > NOW()- interval 3 day;
현재 날짜가 2019-09-15이므로, 2019-09-12 이후의 레코드(1347 + 2033 + 1000)만 집계 대상이 됩니다. 실행 결과는 다음과 같습니다.
+--------------------+
| sum(ProductAmount) |
+--------------------+
| 4380 |
+--------------------+
1 row in set (0.00 sec)
정리
이처럼 NOW() - INTERVAL n DAY 조건을 WHERE 절에 사용하면 현재 날짜 기준으로 원하는 기간의 데이터만 손쉽게 추출할 수 있습니다. 일 단위뿐 아니라 HOUR, MINUTE, MONTH 등 다양한 INTERVAL 단위를 응용할 수 있으니 실무에서 유용하게 활용해 보시기 바랍니다.