Jump to content
Fórum Script Brasil
  • 0

SQL - POSTGRES


Alisson Nunes da Rocha
 Share

Question

Boa tarde pessoal, sou novo na area e gostaria de um apoio do forum... Estou tentando trazer num mesmo SQL o ultimo registro de cada obra (COD_OBRA)...

Observa que nos 2 primeiro registros, eu tenho: 126, 124 da mesma obra, gostaria de trazer o registro 126 (ultimo registro e maior cod_ptrab) e nas demais, ficaria:

126,

116,

31

Sempre os maiores registros de cada obra.... Se alguém pode me ajudar, fico grato!

Segue abaixo os registros retornado e o SQL:

SQL.jpg

SELECT 
    max(ptrab.id),
    ptrab.id,
    ptrab.cod_ptrab,
    ptrab.valor,
    ptrab.status,
    obra.cod_obra, 
    obra.objeto, 
    (SELECT cod_oog FROM sisdoc_v2.oog WHERE cod_ptrab = ptrab.id AND status = 'AP' ORDER BY versao DESC LIMIT 1) as oog
FROM 
    sisdoc_v2.ptrab_capa as ptrab,
    obra
WHERE
    obra.id_om = 4002 AND
    obra.situacao in('EA') AND
    obra.cod_obra = ptrab.cod_obra AND
    ptrab.status in('TT', 'AP')
GROUP BY 
    ptrab.id, 
    ptrab.cod_ptrab, 
    ptrab.valor, 
    obra.cod_obra, 
    obra.objeto, 
    ptrab.status 
ORDER BY 
    ptrab.cod_ptrab DESC

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

SELECT
    ptrab.id,
    ptrab.cod_ptrab,
    ptrab.valor,
    ptrab.status,
    obra.cod_obra,
    obra.objeto,
    (SELECT cod_oog FROM sisdoc_v2.oog WHERE cod_ptrab = ptrab.id AND status = 'AP' ORDER BY versao DESC LIMIT 1) as oog
FROM
    (
        select max(ptrab.id) as id, obra.cod_obra
        from sisdoc_v2.ptrab_capa ptrab
        inner join obra on ptrab.cod_obra = obra.cod_obra
        group by obra.cod_obra
    ) s
    inner join sisdoc_v2.ptrab_capa ptrab on s.id = ptrab.id,
    inner join obra on obra.cod_obra = s.cod_obra
WHERE
    obra.id_om = 4002 AND
    obra.situacao in('EA') AND
    ptrab.status in('TT', 'AP')
ORDER BY
    ptrab.cod_ptrab DESC

Tente sempre usar JOIN explícito.

Link to comment
Share on other sites

  • 0

Bom dia KAKAO, obrigado pelo auxilio...

Ao executar sua query, me deparei com esse erro:

ERRO: erro de sintaxe em ou próximo a "join"

LINE 17: inner join obra on obra.cod_obra = s.cod_obra

^

********** Erro **********

ERRO: erro de sintaxe em ou próximo a "join"

SQL state: 42601

Caracter: 50

Consegue me ajudar? Vlw amigo!

Link to comment
Share on other sites

  • 0

Tinha uma vírgula a mais. Vai postando os erros ai que eu vou corrigindo.

SELECT
    ptrab.id,
    ptrab.cod_ptrab,
    ptrab.valor,
    ptrab.status,
    obra.cod_obra,
    obra.objeto,
    (SELECT cod_oog FROM sisdoc_v2.oog WHERE cod_ptrab = ptrab.id AND status = 'AP' ORDER BY versao DESC LIMIT 1) as oog
FROM
    (
        select max(ptrab.id) as id, obra.cod_obra
        from sisdoc_v2.ptrab_capa ptrab
        inner join obra on ptrab.cod_obra = obra.cod_obra
        group by obra.cod_obra
    ) s
    inner join sisdoc_v2.ptrab_capa ptrab on s.id = ptrab.id
    inner join obra on obra.cod_obra = s.cod_obra
WHERE
    obra.id_om = 4002 AND
    obra.situacao in('EA') AND
    ptrab.status in('TT', 'AP')
ORDER BY
    ptrab.cod_ptrab DESC

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.8k
    • Total Posts
      648.7k
×
×
  • Create New...