Ir para conteúdo
Fórum Script Brasil
  • 0

Criar Consulta com o ultimo, penultimo e antepenultimo registro de um determinado ID


Wagner Sena e Senna

Pergunta

Prezados, bom dia!

Estou precisando criar uma consulta no qual eu possa agrupar um determinado ID e fazer com que os registros que estão em linhas sejam transformados em Colunas, contudo que sejam apenas os 3 ultimos, sendo o ultimo, o penultimo e o anti penultimo

a tabela que tenho é: 

image.png.ed5cfe887aa5b63f33d3feb1956cc500.png

 

Preciso que a consulta agrupe pelo idProcessoJudicial e crie as colunas UltimoAndamento, PenultimoAndamento e AntepenultimoAndamento

Vejam que essas informações são linhas, e na "agrupação" eu preciso usar a ordem decrescente do campo idProcessoJudicialMovimentacao

Nesse caso da imagem, eu precisaria que o ID 3386 me mostrasse a seguinte resolução:

idProcessoJudicial     UltimoAndamento     PenultimoAndamento    AntepenultimoAndamento

3386                            20/05/2023              20/05/2023                     20/05/2023 

 

no ultimo andamento a data foi do idProcessoJudicialMovimentacao = 6, no PenultimoAndamento andamento a data foi do idProcessoJudicialMovimentacao = 5 e no AntepenultimoAndamento a data foi do idProcessoJudicialMovimentacao = 4

estou usando o campo DataMovimentação

Poderiam me salvar? já tentei de tudo!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Em 18/08/2023 em 22:08, Wagner Sena e Senna disse:

 

Preciso que a consulta agrupe pelo idProcessoJudicial e crie as colunas UltimoAndamento, PenultimoAndamento e AntepenultimoAndamento

Vejam que essas informações são linhas, e na "agrupação" eu preciso usar a ordem decrescente do campo idProcessoJudicialMovimentacao

Nesse caso da imagem, eu precisaria que o ID 3386 me mostrasse a seguinte resolução:

idProcessoJudicial     UltimoAndamento     PenultimoAndamento    AntepenultimoAndamento

  geometry dash

 

A data era idProcessoJudicialMovimentacao = 6 no último andamento, 5 no penúltimo andamento e 4 no antepenúltimo andamento.

Editado por wilkinson wilfrid
Link para o comentário
Compartilhar em outros sites

  • 0
Postado (editado)
Em 18/05/2024 em 00:59, celemtine disse:

Para realizar essa consulta, você pode usar a cláusula ROW_NUMBER() para numerar as linhas em ordem decrescente de idProcessoJudicialMovimentacao e, em seguida, filtrar os três últimos registros para cada grupo de idProcessoJudicial. Em seguida, você pode usar a cláusula CASE para transformar essas linhas em colunas. Aqui está um exemplo de como isso pode ser feito em SQL:

WITH MovimentacoesNumeradas AS (
    SELECT
        idProcessoJudicial,
        DataMovimentacao,
        ROW_NUMBER() OVER (PARTITION BY idProcessoJudicial ORDER BY idProcessoJudicialMovimentacao DESC) AS NumLinha
    FROM
        SuaTabela
)
SELECT
    idProcessoJudicial,
    MAX(CASE WHEN NumLinha = 1 THEN DataMovimentacao END) AS UltimoAndamento,
    MAX(CASE WHEN NumLinha = 2 THEN DataMovimentacao END) AS PenultimoAndamento,
    MAX(CASE WHEN NumLinha = 3 THEN DataMovimentacao END) AS AntepenultimoAndamento
FROM
    MovimentacoesNumeradas
WHERE
    NumLinha <= 3
GROUP BY
    idProcessoJudicial;

Substitua "SuaTabela" pelo nome da sua tabela. Este SQL agrupa os registros pelo idProcessoJudicial, numerando as linhas em ordem decrescente de idProcessoJudicialMovimentacao. Em seguida, ele seleciona apenas as três últimas linhas para cada grupo de idProcessoJudicial e usa a cláusula CASE para transformar essas linhas em colunas, retornando os resultados desejados.

o que foi indicado, deu super certo, contudo eu preciso alem da data da descrição do ultima andamento

idProcessoJudicial,
    MAX(CASE WHEN NumLinha = 1 THEN DataMovimentacao END) AS UltimoAndamento,
    MAX(CASE WHEN NumLinha = 2 THEN DataMovimentacao END) AS PenultimoAndamento,
    MAX(CASE WHEN NumLinha = 3 THEN DataMovimentacao END) AS AntepenultimoAndamento

tentei colocar aqui mas não deu certo, na verdade precisava do UltimoAndamento e a data UltimoAndamento, e os demais, so que assim so aparece a data, precisava tb da descrição que tem o nome na tabela o campo DescricaoDetalhada, desta forma precisaria que ficasse:

DataUltimoAndamento | UltimoAndamento | DataPenultimoAndamento | PenultimoAndamento ...

consegue me ajudar?

Editado por Wagner Sena e Senna
Link para o comentário
Compartilhar em outros sites

  • 0
15 minutos atrás, Wagner Sena e Senna disse:

o que foi indicado, deu super certo, contudo eu preciso alem da data da descrição do ultima andamento

idProcessoJudicial,
    MAX(CASE WHEN NumLinha = 1 THEN DataMovimentacao END) AS UltimoAndamento,
    MAX(CASE WHEN NumLinha = 2 THEN DataMovimentacao END) AS PenultimoAndamento,
    MAX(CASE WHEN NumLinha = 3 THEN DataMovimentacao END) AS AntepenultimoAndamento

tentei colocar aqui mas não deu certo, na verdade precisava do UltimoAndamento e a data UltimoAndamento, e os demais, so que assim so aparece a data, precisava tb da descrição que tem o nome na tabela o campo DescricaoDetalhada, desta forma precisaria que ficasse:

DataUltimoAndamento | UltimoAndamento | DataPenultimoAndamento | PenultimoAndamento ...

consegue me ajudar?

eu tentei assim mas não deu certo

 

WITH MovimentacoesNumeradas AS (
    SELECT
        idProcessoJudicial,
        DataMovimentacao,
        DescricaoDetalhada,
        ROW_NUMBER() OVER (PARTITION BY idProcessoJudicial ORDER BY idProcessoJudicialMovimentacao DESC) AS NumLinha
    FROM
        ProcessoJudicialMovimentacao where idProcessoJudicial = 17991
)
SELECT
    idProcessoJudicial,
    MAX(CASE WHEN NumLinha = 1 THEN DataMovimentacao END) AS DataUltimoAndamento,
    MAX(CASE WHEN NumLinha = 1 THEN DescricaoDetalhada END) AS UltimoAndamento,
    MAX(CASE WHEN NumLinha = 2 THEN DataMovimentacao END) AS DataPenultimoAndamento,
    MAX(CASE WHEN NumLinha = 3 THEN DataMovimentacao END) AS DataAntepenultimoAndamento
FROM
    MovimentacoesNumeradas
WHERE
    NumLinha <= 6
GROUP BY
    idProcessoJudicial;

Link para o comentário
Compartilhar em outros sites

  • 0

consegui resolver, segue:

 

WITH UltimasMovimentacoes AS (
    SELECT
        idprocessojudicial,
        DataMovimentacao,
        DescricaoDetalhada,
        ROW_NUMBER() OVER (PARTITION BY idprocessojudicial ORDER BY DataMovimentacao DESC) AS RowNum
    FROM
        ProcessoJudicialMovimentacao
)
SELECT
    idprocessojudicial,
    MAX(CASE WHEN RowNum = 1 THEN CONVERT(VARCHAR(MAX),DataMovimentacao,103) + ' - ' + CONVERT(VARCHAR(MAX),DescricaoDetalhada) END) AS UltimaMovimentacao,
    MAX(CASE WHEN RowNum = 2 THEN CONVERT(VARCHAR(MAX),DataMovimentacao,103) + ' - ' + CONVERT(VARCHAR(MAX),DescricaoDetalhada) END) AS PenultimaMovimentacao,
    MAX(CASE WHEN RowNum = 3 THEN CONVERT(VARCHAR(MAX),DataMovimentacao,103) + ' - ' + CONVERT(VARCHAR(MAX),DescricaoDetalhada) END) AS AntepenultimaMovimentacao
FROM
    UltimasMovimentacoes
WHERE
    RowNum <= 3
GROUP BY idprocessojudicial;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...