Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL NOW() 함수로 현재 날짜 기준 최근 3일 이내 레코드의 합계 구하기

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 단위를 응용할 수 있으니 실무에서 유용하게 활용해 보시기 바랍니다.