MySQL에서 지난 1시간 내에 추가된 행 가져오기
MySQL에서는 date_sub() 함수와 now() 함수를 함께 사용하면 현재 시간을 기준으로 지난 한 시간 동안 추가된 행을 간단하게 조회할 수 있습니다. 로그 기록 분석, 실시간 모니터링 등 최근 데이터만 다뤄야 할 때 매우 유용한 방법입니다.
기본 문법
기본적인 쿼리 문법은 다음과 같습니다.
select * from yourTableName where yourDateTimeColumnName >= date_sub(now(), interval 1 hour);
date_sub(now(), interval 1 hour)는 현재 시간에서 정확히 1시간 전 시점을 계산하며, datetime 컬럼 값이 그 이후인 행만 결과로 반환됩니다. 개념을 쉽게 이해하기 위해 실제 테이블을 만들어 예제를 살펴보겠습니다.
1. 테이블 생성
먼저 아래 쿼리로 테이블을 생성합니다.
mysql> create table LastHourRecords -> ( -> Id int, -> Name varchar(100), -> Login datetime -> ); Query OK, 0 rows affected (0.67 sec)
2. 데이터 삽입
insert 명령으로 datetime 형식의 레코드를 입력합니다.
mysql> insert into LastHourRecords values(1,'John','2018-12-19 10:00:00'); Query OK, 1 row affected (0.17 sec) mysql> insert into LastHourRecords values(2,'Carol','2018-12-19 10:10:00'); Query OK, 1 row affected (0.15 sec) mysql> insert into LastHourRecords values(3,'Sam','2018-12-19 10:05:00'); Query OK, 1 row affected (0.13 sec) mysql> insert into LastHourRecords values(4,'Mike','2018-12-18 12:10:00'); Query OK, 1 row affected (0.10 sec)
3. 전체 레코드 확인
select 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select * from LastHourRecords;
출력 결과
+------+-------+---------------------+ | Id | Name | Login | +------+-------+---------------------+ | 1 | John | 2018-12-19 10:00:00 | | 2 | Carol | 2018-12-19 10:10:00 | | 3 | Sam | 2018-12-19 10:05:00 | | 4 | Mike | 2018-12-18 12:10:00 | +------+-------+---------------------+ 4 rows in set (0.00 sec)
지난 1시간 내에 추가된 행 조회하기
이제 date_sub()와 now()를 활용해 최근 1시간 이내에 추가된 행만 가져오는 쿼리를 실행해 보겠습니다.
mysql> select * from LastHourRecords -> where Login >= date_sub(now(), interval 1 hour);
출력 결과
+------+-------+---------------------+ | Id | Name | Login | +------+-------+---------------------+ | 1 | John | 2018-12-19 10:00:00 | | 2 | Carol | 2018-12-19 10:10:00 | | 3 | Sam | 2018-12-19 10:05:00 | +------+-------+---------------------+ 3 rows in set (0.00 sec)
실행 결과를 보면 어제 날짜인 Mike의 레코드는 제외되고, 최근 1시간 이내에 로그인한 John, Carol, Sam의 레코드만 조회된 것을 확인할 수 있습니다. 이처럼 date_sub(now(), interval N hour) 구문의 숫자를 조정하면 원하는 시간 범위(예: 24시간, 7일 등)의 데이터도 손쉽게 필터링할 수 있습니다.