복붙노트

[SQL] 어떻게 PostgreSQL을 범주별로 최대 날짜 그룹 ID를 선택하려면?

SQL

어떻게 PostgreSQL을 범주별로 최대 날짜 그룹 ID를 선택하려면?

예를 들어, 내가 범주별로 최대 날짜 그룹 ID를 선택하고 싶습니다, 결과는 : 7, 2, 6

id  category  date
1   a         2013-01-01
2   b         2013-01-03
3   c         2013-01-02
4   a         2013-01-02
5   b         2013-01-02
6   c         2013-01-03
7   a         2013-01-03
8   b         2013-01-01
9   c         2013-01-01

나는 PostgreSQL의에서이 작업을 수행하는 방법을 알 수 있습니까?

해결법

  1. ==============================

    1.이 DISTINCT ON (표준 DISTINCT의 포스트 그레스의 특정 확장자)을위한 완벽한 사용 사례입니다 :

    이 DISTINCT ON (표준 DISTINCT의 포스트 그레스의 특정 확장자)을위한 완벽한 사용 사례입니다 :

    SELECT DISTINCT ON (category)
           id  -- , category, date -- add any other column (expression) from the same row
    FROM   tbl
    ORDER  BY category, "date" DESC;
    

    정렬 순서를 내림차순주의. 열이 NULL이 될 수 있다면, 당신은 NULLS LAST를 추가 할 수 있습니다 :

    DISTINCT ON는 간단하고 빠릅니다. 이 관련 답변에 대한 자세한 설명 :

    큰 테이블의 경우이 다른 방법을 고려하십시오

    카테고리 당 많은 행에 대한 성능 최적화 :

  2. ==============================

    2.이걸로 해봐:

    이걸로 해봐:

    SELECT t1.* FROM Table1 t1
    JOIN 
    (
       SELECT category, MAX(date) AS MAXDATE
       FROM Table1
       GROUP BY category
    ) t2
    ON T1.category = t2.category
    AND t1.date = t2.MAXDATE
    
  3. ==============================

    3.http://sqlfiddle.com/#!12/7a145/14 : 또 다른 방법은 FIRST_VALUE 윈도우 함수를 사용하는 것입니다

    http://sqlfiddle.com/#!12/7a145/14 : 또 다른 방법은 FIRST_VALUE 윈도우 함수를 사용하는 것입니다

    SELECT DISTINCT
      first_value("id") OVER (PARTITION BY "category" ORDER BY "date" DESC) 
    FROM Table1
    ORDER BY 1;
    

    ... 적절한 인덱스가 존재 어디 의심 hims056의 제안은 일반적으로 더 나은 수행하지만.

    세 번째 해결책은 :

    SELECT
      id
    FROM (
      SELECT
        id,
        row_number() OVER (PARTITION BY "category" ORDER BY "date" DESC) AS rownum
      FROM Table1
    ) x
    WHERE rownum = 1;
    
  4. ==============================

    4.MAX (날짜) HAVING 고양이 BY TBL 그룹에서 SELECT ID

    MAX (날짜) HAVING 고양이 BY TBL 그룹에서 SELECT ID

  5. from https://stackoverflow.com/questions/16914098/how-to-select-id-with-max-date-group-by-category-in-postgresql by cc-by-sa and MIT license