날짜 값이 저장된 레코드 중에서 마지막 날짜, 즉 가장 최신 날짜를 조회하려면 집계 함수 MAX()를 서브쿼리와 함께 사용하면 됩니다. 이번 글에서는 예제 테이블을 만들고 실제 데이터를 넣은 뒤, 최신 날짜에 해당하는 레코드만 추출하는 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ExpiryDate date
);
Query OK, 0 rows affected (1.40 sec)Id는 자동 증가되는 기본 키이고, ExpiryDate에는 만료 날짜를 DATE 타입으로 저장합니다.
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 여러 개의 날짜 값을 입력합니다.
mysql> insert into DemoTable(ExpiryDate) values('2018-12-31');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ExpiryDate) values('2019-09-01');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(ExpiryDate) values('2019-09-01');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(ExpiryDate) values('2016-08-30');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ExpiryDate) values('2019-06-23');
Query OK, 1 row affected (0.17 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+------------+ | Id | ExpiryDate | +----+------------+ | 1 | 2018-12-31 | | 2 | 2019-09-01 | | 3 | 2019-09-01 | | 4 | 2016-08-30 | | 5 | 2019-06-23 | +----+------------+ 5 rows in set (0.00 sec)
총 5개의 레코드가 저장되어 있으며, 여기서 가장 최신 날짜는 2019-09-01입니다.
4. 마지막 날짜가 있는 레코드 조회하기
WHERE 절 안에 서브쿼리로 MAX(ExpiryDate)를 넣으면, 해당 컬럼에서 가장 큰(즉, 가장 늦은) 날짜와 일치하는 레코드만 가져올 수 있습니다.
mysql> select *from DemoTable
where ExpiryDate=(select max(ExpiryDate) from DemoTable);위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다. 입력된 데이터 중 마지막 날짜인 2019-09-01에 해당하는 두 개의 레코드가 반환된 것을 확인할 수 있습니다.
+----+------------+ | Id | ExpiryDate | +----+------------+ | 2 | 2019-09-01 | | 3 | 2019-09-01 | +----+------------+ 2 rows in set (0.00 sec)
정리
MySQL에서 날짜 컬럼의 최신 값을 기준으로 레코드를 찾으려면 MAX() 함수를 서브쿼리로 활용하는 방식이 가장 간단하고 확실합니다. 같은 원리로 MIN() 함수를 사용하면 가장 오래된 날짜의 레코드도 손쉽게 조회할 수 있습니다.