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

MySQL에서 중복 값이 있는 다른 열 기준으로 그룹화해 타임스탬프 중 가장 빠른 날짜 가져오기

중복된 값이 존재하는 다른 열을 기준으로 그룹화한 뒤, 타임스탬프(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 절을 조합하면 중복 값이 있는 열을 기준으로 그룹화하여, 각 그룹의 타임스탬프 중 첫 번째(가장 이른) 날짜를 간단하게 조회할 수 있습니다.