본문 바로가기
MySql

MySQL | 각 범주의 레코드를 하나만 선택하는 방법은 무엇입니까?

by 베이스 공부 2021. 1. 12.
반응형

데이터가있는 레코드가 포함 된 테이블이 있으며 각 레코드는 카테고리에 속합니다. 다음과 같은 테이블이 있다고 가정 해 봅시다.

ID | Category | Title    | Date
--------------------------------------
1  | Cat 1    | Ttl 1    | 2013-02-18
2  | Cat 2    | Ttl 2    | 2013-02-18
3  | Cat 1    | Ttl 3    | 2013-02-20

내가 좋아하는 것은 각 카테고리별로 하나의 기사 만 가져 오는 것이며 내가 가져올 기사는 표에서 최신 기사 여야합니다.

보다 깊이있는 결과는 다음과 같아야합니다.

ID | Category | Title    | Date
--------------------------------------
2  | Cat 2    | Ttl 2    | 2013-02-18
3  | Cat 1    | Ttl 3    | 2013-02-20

보시다시피 각 범주별로 하나의 레코드 (Cat 1에 대한 레코드와 Cat 2에 대한 레코드) 만 있으며 Cat 1의 레코드 중 최신 레코드가 있습니다.

MySQL 쿼리에서 어떻게 번역 할 수 있습니까?

 

해결 방법

 

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT Category, MAX(date) max_date
            FROM    tableName
            GROUP BY Category
        ) b ON a.category = b.category AND
                a.date = b.max_date

성능 향상을 위해 Category, date 열에 복합 INDEX 를 추가합니다.

또는

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT Category, MAX(ID) max_ID
            FROM    tableName
            GROUP BY Category
        ) b ON a.category = b.category AND
                a.ID = b.max_ID


 

참조 페이지 https://stackoverflow.com/questions/15028852

 

 

반응형

댓글