중복된 값이 존재하는 다른 열을 기준으로 그룹화한 뒤, 타임스탬프(timestamp) 값 중 가장 빠른(첫 번째) 날짜를 구하려면 MySQL의 집계 함수 MIN()과 GROUP BY 절을 함께 사용하면 됩니다. MIN() 함수는 그룹별로 가장 작은 값을 반환하기 때문에, 유닉스 타임스탬프 형태로 저장된 날짜 데이터에서도 가장 이른 시점을 손쉽게 추출할 수 있습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. 여기서는 Value와 ShippingTimestamp 두 개의 컬럼을 가진 테이블을 만들어 보겠습니다.
mysql> create table DemoTable1870
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value int,
ShippingTimestamp varchar(100)
);
Query OK, 0 rows affected (0.00 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다. 의도적으로 Value 컬럼에 중복 값(10, 11)이 포함되도록 데이터를 넣었습니다.
mysql> insert into DemoTable1870(Value,ShippingTimestamp) values(10,'1570645800'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1870(Value,ShippingTimestamp) values(10,'1546194600'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1870(Value,ShippingTimestamp) values(11,'1573324200'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1870(Value,ShippingTimestamp) values(11,'1557599400'); Query OK, 1 row affected (0.00 sec)
3. 저장된 데이터 확인하기
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1870;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+-------+-------------------+ | Id | Value | ShippingTimestamp | +----+-------+-------------------+ | 1 | 10 | 1570645800 | | 2 | 10 | 1546194600 | | 3 | 11 | 1573324200 | | 4 | 11 | 1557599400 | +----+-------+-------------------+ 4 rows in set (0.00 sec)
4. 그룹별 가장 빠른 타임스탬프 조회하기
이제 Value 컬럼을 기준으로 그룹화하고, 각 그룹에서 가장 빠른(가장 작은) 타임스탬프를 가져오는 쿼리입니다.
mysql> select min(ShippingTimestamp) from DemoTable1870 group by Value;
실행 결과는 다음과 같습니다.
+------------------------+ | min(ShippingTimestamp) | +------------------------+ | 1546194600 | | 1557599400 | +------------------------+ 2 rows in set (0.00 sec)
결과 해석
위 결과를 보면 Value가 10인 그룹에서는 1546194600(2018년 12월 30일), Value가 11인 그룹에서는 1557599400(2019년 5월 11일)이 각각 가장 빠른 배송 타임스탬프로 반환된 것을 확인할 수 있습니다. 만약 어떤 Value에 해당하는 결과인지 함께 표시하고 싶다면 SELECT 절에 Value 컬럼을 추가하면 됩니다.
mysql> select Value, min(ShippingTimestamp) as FirstShippingDate
from DemoTable1870 group by Value;이처럼 MIN() 함수와 GROUP BY 절을 조합하면 중복 값이 있는 열을 기준으로 그룹화하여, 각 그룹의 타임스탬프 중 첫 번째(가장 이른) 날짜를 간단하게 조회할 수 있습니다.