개요
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분)이 정확하게 계산된 것을 확인할 수 있습니다.