복붙노트

[SQL] PostgreSQL는 주어진 ID에 대한 가장 최근 항목을 선택

SQL

PostgreSQL는 주어진 ID에 대한 가장 최근 항목을 선택

표는 기본적으로 다음과 같습니다

연속 ID, ID, 일자, 데이터, 데이터, 데이터 등

동일한 ID에 대한 여러 행이있을 수 있습니다. 나는 각 ID에 대한 가장 최근의 항목을 보여줍니다 보고서에 사용되는이 테이블의 뷰를 작성하고 싶습니다. 그것은 모든 열을 표시해야합니다.

는 SQL을 가진 사람의 도움을 나를 선택할 수 있습니까? 감사.

해결법

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

    1.이이 작업을 수행하는 약 5 가지 방법은,하지만 여기에 하나 :

    이이 작업을 수행하는 약 5 가지 방법은,하지만 여기에 하나 :

    SELECT *
    FROM yourTable AS T1 
    WHERE NOT EXISTS(
        SELECT *
        FROM yourTable AS T2
        WHERE T2.ID = T1.ID AND T2.Date > T1.Date
    )
    

    그리고 여기에 또 다른입니다 :

    SELECT T1.*
    FROM yourTable AS T1
    LEFT JOIN yourTable AS T2 ON
    (
        T2.ID = T1.ID 
        AND T2.Date > T1.Date
    )
    WHERE T2.ID IS NULL
    

    하나 더:

    WITH T AS (
        SELECT *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Date DESC) AS rn
        FROM yourTable
    )
    SELECT * FROM T WHERE rn = 1
    

    좋아, 내가 여기에 내가 (지금은) 게시합니다 마지막이다, 멀리 실시 점점 해요 :

    WITH T AS (
        SELECT ID, MAX(Date) AS latest_date
        FROM yourTable
        GROUP BY ID
    )
    SELECT yourTable.*
    FROM yourTable
    JOIN T ON T.ID = yourTable.ID AND T.latest_date = yourTable.Date
    
  2. ==============================

    2.나는 DISTINCT ON을 사용

    나는 DISTINCT ON을 사용

    CREATE VIEW your_view AS
    SELECT DISTINCT ON (id) *
    FROM your_table a
    ORDER BY id, date DESC;
    

    이 괄호 안의 식의 중복과 억압 행에 있기 때문에 별개의 작동합니다. 의하여 순서 DESC 정렬은 일반적으로 마지막 하나는 제 것이고, 그 결과에 보여 그 하나 그에.

    https://www.postgresql.org/docs/10/static/sql-select.html#SQL-DISTINCT

  3. ==============================

    3.이 상관 관계 서브 쿼리에 대한 좋은 사용처럼 보인다 :

    이 상관 관계 서브 쿼리에 대한 좋은 사용처럼 보인다 :

    CREATE VIEW your_view AS
    SELECT *
    FROM your_table a
    WHERE date = (
        SELECT MAX(date)
        FROM your_table b
        WHERE b.id = a.id
    )
    

    귀하의 날짜 열 고유 (타임 스탬프 타입 등) 각 행을 식별해야합니다.

  4. from https://stackoverflow.com/questions/9472731/postgresql-selecting-most-recent-entry-for-a-given-id by cc-by-sa and MIT license