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

MySQL에서 현재 시간 기준 10분 이내의 레코드를 조회하는 방법

MySQL에서 현재 타임스탬프 기준 10분 이내의 레코드 조회하기

MySQL에서 현재 시간(NOW())으로부터 10분 이내에 해당하는 모든 레코드를 조회하려면 DATE_SUB() 함수를 WHERE 절과 함께 사용하면 됩니다. DATE_SUB()는 특정 날짜나 시간에서 지정한 간격을 빼는 함수로, NOW()에서 10분(MINUTE)을 빼면 정확히 10분 전 시점을 구할 수 있습니다.

기본 문법은 다음과 같습니다.

SELECT * FROM yourTableName
WHERE yourColumnName >= DATE_SUB(NOW(), INTERVAL 10 MINUTE);

예제 테이블 생성

문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 아래 쿼리는 사용자 ID(Id), 사용자 이름(UserName), 마지막 접속 시간(UserLastseen) 세 개의 컬럼을 가진 users 테이블을 만듭니다.

mysql> create table users
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> UserName varchar(20),
-> UserLastseen datetime,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.91 sec)

샘플 데이터 삽입

INSERT 명령어를 사용하여 테이블에 여러 개의 레코드를 삽입합니다. 두 번째 레코드(Sam)처럼 now() 함수를 직접 사용하여 현재 시간을 저장할 수도 있습니다.

mysql> insert into users(UserName,UserLastseen) values('Larry','2019-01-15 02:45:00');
Query OK, 1 row affected (0.15 sec)

mysql> insert into users(UserName,UserLastseen) values('Sam',now());
Query OK, 1 row affected (0.25 sec)

mysql> insert into users(UserName,UserLastseen) values('Mike','2019-01-15 02:30:00');
Query OK, 1 row affected (0.15 sec)

mysql> insert into users(UserName,UserLastseen) values('Bob','2019-01-15 15:02:00');
Query OK, 1 row affected (0.23 sec)

mysql> insert into users(UserName,UserLastseen) values('David','2019-01-15 14:55:00');
Query OK, 1 row affected (0.15 sec)

SELECT 문으로 테이블의 전체 레코드를 확인합니다.

mysql> select *from users;

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

+----+----------+---------------------+
| Id | UserName | UserLastseen |
+----+----------+---------------------+
| 1 | Larry | 2019-01-15 02:45:00 |
| 2 | Sam | 2019-01-15 15:01:52 |
| 3 | Mike | 2019-01-15 02:30:00 |
| 4 | Bob | 2019-01-15 15:02:00 |
| 5 | David | 2019-01-15 14:55:00 |
+----+----------+---------------------+
5 rows in set (0.00 sec)

10분 이내 레코드 조회 쿼리 실행

이제 현재 타임스탬프 기준 10분 이내의 모든 레코드를 조회하는 쿼리입니다.

mysql> select *from users
-> where UserLastseen >= date_sub(now(),interval 10 minute);

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

+----+----------+---------------------+
| Id | UserName | UserLastseen |
+----+----------+---------------------+
| 2 | Sam | 2019-01-15 15:01:52 |
| 4 | Bob | 2019-01-15 15:02:00 |
| 5 | David | 2019-01-15 14:55:00 |
+----+----------+---------------------+
3 rows in set (0.00 sec)

결과를 보면 Sam(15:01:52), Bob(15:02:00), David(14:55:00) 세 명의 사용자만 조회되었습니다. 이들은 모두 NOW()가 반환한 현재 시간(약 15:02)으로부터 10분 이내에 접속한 사용자입니다. 반면 Larry와 Mike는 새벽 시간대에 접속한 기록이라 조건에 맞지 않아 결과에서 제외되었습니다.

추가로 알아두면 좋은 팁

DATE_SUB() 대신 NOW() - INTERVAL 10 MINUTE처럼 산술 연산자를 사용해도 동일한 결과를 얻을 수 있습니다. 또한 조회 범위를 변경하고 싶다면 INTERVAL 뒤의 단위를 HOUR, DAY, WEEK 등으로 바꾸면 됩니다. 마지막으로, UserLastseen 같은 날짜·시간 컬럼에 인덱스를 생성해 두면 대량의 데이터를 조회할 때도 쿼리 성능을 크게 향상시킬 수 있습니다.