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

MySQL에서 날짜 컬럼 기준 최신 날짜 한 건만 조회하는 방법

개요

MySQL에서 날짜(DATE) 타입의 데이터가 저장된 테이블에서 가장 최근의 날짜(최신 날짜)를 조회해야 하는 경우가 자주 있습니다. 예를 들어 마감일, 등록일, 수정일 중 가장 늦은 날짜 하나만 가져오고 싶다면 ORDER BY ... DESCLIMIT 1을 조합하면 간단하게 해결할 수 있습니다.

이번 글에서는 실제 예제 테이블을 만들고, 최신 날짜를 조회하는 쿼리를 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 날짜를 저장할 테이블을 생성합니다.

mysql> create table DemoTable
(
    DueDate date
);
Query OK, 0 rows affected (0.56 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용해 여러 개의 날짜 레코드를 입력합니다.

mysql> insert into DemoTable values('2018-10-01');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2016-12-31');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-07-02');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('2015-01-12');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-04-26');
Query OK, 1 row affected (0.13 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+------------+
| DueDate    |
+------------+
| 2018-10-01 |
| 2016-12-31 |
| 2019-07-02 |
| 2015-01-12 |
| 2019-04-26 |
+------------+
5 rows in set (0.00 sec)

총 5개의 날짜가 무작위 순서로 저장되어 있습니다.

4. 최신 날짜 조회하기

현재 날짜가 2019-08-15라고 가정해 보겠습니다. 이 데이터 중 가장 최신 날짜는 2019-07-02입니다. 이 값을 조회하려면 DueDate 컬럼을 내림차순(DESC)으로 정렬한 뒤 첫 번째 행만 가져오면 됩니다.

mysql> select *from DemoTable order by DueDate DESC limit 1;

실행 결과는 다음과 같습니다.

+------------+
| DueDate    |
+------------+
| 2019-07-02 |
+------------+
1 row in set (0.03 sec)

쿼리 동작 원리

  • ORDER BY DueDate DESC: 날짜를 가장 큰 값(미래에 가까운 날짜)부터 내림차순으로 정렬합니다.
  • LIMIT 1: 정렬된 결과 중 첫 번째 행, 즉 가장 최신 날짜 한 건만 반환합니다.

반대로 가장 오래된 날짜가 필요하다면 정렬 방향만 ASC(오름차순)로 바꾸면 됩니다.

mysql> select *from DemoTable order by DueDate ASC limit 1;

마무리

ORDER BY 컬럼명 DESC LIMIT 1 패턴은 날짜뿐 아니라 숫자, 문자열 등 어떤 컬럼이든 최댓값 또는 최신값을 구할 때 널리 사용되는 기본적인 방법입니다. 대용량 테이블에서는 DueDate 컬럼에 인덱스를 추가하면 정렬 비용을 줄여 더 빠른 조회 성능을 얻을 수 있습니다.