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

MySQL에서 열의 첫 번째 날짜와 마지막 날짜를 비교하는 방법

개요

MySQL에서 하나의 열에 기록된 가장 이른 날짜(첫 번째 날짜)와 가장 늦은 날짜(마지막 날짜)를 비교하려면 TIME_TO_SEC() 함수를 MAX(), MIN() 집계 함수와 함께 사용하면 됩니다. 이 방법을 활용하면 사용자가 처음 게시물을 올린 시각과 마지막으로 올린 시각 사이의 간격을 손쉽게 계산할 수 있습니다.

먼저 예제에 사용할 테이블부터 만들어 보겠습니다.

1. 테이블 생성

mysql> create table DemoTable
(
    UserName varchar(100),
    UserPostDatetime datetime
);
Query OK, 0 rows affected (0.65 sec)

DemoTable에는 사용자 이름(UserName)과 게시 일시(UserPostDatetime) 두 개의 컬럼이 있습니다.

2. 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('Adam','2019-08-24 11:10:00');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Adam','2019-08-24 11:20:00');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Adam','2019-08-24 11:50:00');
Query OK, 1 row affected (0.13 sec)

3. 저장된 데이터 확인

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

mysql> select *from DemoTable;

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

+----------+---------------------+
| UserName | UserPostDatetime    |
+----------+---------------------+
|     Adam | 2019-08-24 11:10:00 |
|     Adam | 2019-08-24 11:20:00 |
|     Adam | 2019-08-24 11:50:00 |
+----------+---------------------+
3 rows in set (0.00 sec)

4. 첫 번째 날짜와 마지막 날짜 비교 쿼리

다음은 사용자별로 첫 번째 날짜와 마지막 날짜의 차이를 구하는 쿼리입니다.

mysql> select UserName,sec_to_time(max(time_to_sec(UserPostDatetime))-min(time_to_sec(UserPostDatetime)))t
from DemoTable
group by UserName;

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

+----------+----------+
| UserName | t        |
+----------+----------+
|     Adam | 00:40:00 |
+----------+----------+
1 row in set (0.03 sec)

쿼리 동작 원리

이 쿼리의 동작 과정을 단계별로 살펴보면 다음과 같습니다.

1단계: TIME_TO_SEC() 함수가 UserPostDatetime 값을 자정(00:00:00) 기준 경과 초 단위로 변환합니다.
2단계: MAX()는 가장 늦은 시각의 초 값을, MIN()은 가장 이른 시각의 초 값을 반환하며, 두 값의 차이가 곧 첫 게시와 마지막 게시 사이의 간격(초)이 됩니다.
3단계: SEC_TO_TIME() 함수가 그 차이를 다시 'HH:MM:SS' 형식의 시간 값으로 변환해 줍니다.
4단계: GROUP BY UserName 절이 사용자별로 결과를 묶어 주므로, 여러 사용자가 있더라도 각자의 활동 간격을 한 번에 확인할 수 있습니다.

예제 결과를 보면 Adam의 첫 게시 시각이 11:10:00이고 마지막 게시 시각이 11:50:00이므로, 두 시각의 차이인 00:40:00(40분)이 정확하게 계산된 것을 확인할 수 있습니다.