仅将关联表的最后一行与 PostgreSQL 连接

pau*_*ani 1 sql postgresql

鉴于下表:

Table "public.vs_protocolo"
     Column      |            Type             |                         Modifiers                         
-----------------+-----------------------------+-----------------------------------------------------------
 id              | integer                     | not null default nextval('vs_protocolo_id_seq'::regclass)
 data_criacao    | timestamp without time zone | not null default now()
 ano_processo    | integer                     | not null
 numero_processo | integer                     | not null


Table "public.vs_protocolo_historico"
    Column    |            Type             |                              Modifiers                              
--------------+-----------------------------+---------------------------------------------------------------------
 id           | integer                     | not null default nextval('vs_protocolo_historico_id_seq'::regclass)
 id_protocolo | integer                     | not null
 descricao    | character varying(255)      | not null
 status       | integer                     | not null default 0
 data_criacao | timestamp without time zone | not null default now()
Run Code Online (Sandbox Code Playgroud)

我必须从 中选择vs_protocolo与最后一行连接的所有行vs_protocolo_historico。

我担心性能,所以它必须避免子查询,或者至少避免对vs_protocolo.

注:vs_protocolo_historico(id_protocolo) REFERENCES vs_protocolo(id)。

Clo*_*eto 5

我认为这个更简单更快

select
    id,
    p.ano_processo,
    p.numero_processo,
    h.descricao,
    h.status,
    h.data_modificacao
from
    vs_protocolo p
    inner join
    (
        select distinct on (id_protocolo)
            id_protocolo as id,
            descricao,
            status,
            data_criacao as data_modificacao
        from vs_protocolo_historico
        order by id_protocolo, data_criacao desc
    ) h using (id)
Run Code Online (Sandbox Code Playgroud)