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

valores duplicados


flaromma

Pergunta

Boa tarde

Estou tentando executar uma query para monitoras os meus processos com maior tempo de execução na semana, mas estou tento uma dificuldade

por exemplo:

O processo "A","B","C","D", "E".... executam todos os dias. Na semana preciso saber os 5 processos que levaram mais tempo para executar.
Vamos supor que o processo "A" leve sempre 03 horas e os demais não passem de 30 minutos a não ser por algum problema, como eles executam diariamente se eu executar a query abaixo vai ser exibido 05 vezes o Nome_processo "A" com o seu respectivo tempo de execução. Mas o que eu preciso são os 5 processos mais demorados sem repetir o nome_processo.

select nome_processo,
start_time,
end_time,
tempo_execucao
from historico
where start_time between '01-03-2019' and '05-03-2019' 
order by tempo_execucao desc limit 5

Como ficaria o resultado com essa query:
nome_processo    start_time    end_time    tempo_execução
A        01-03-2019    01-03-2019    3:45:00
A        04-03-2019    04-03-2019    3:40:00
A        02-03-2019    02-03-2019    3:30:00
A        05-03-2019    05-03-2019    3:28:00
A        03-03-2019    03-03-2019    3:27:00

E na verdade o resultado que eu preciso que seria:

nome_processo    start_time    end_time    tempo_execução
A        01-03-2019    01-03-2019    3:45:00
B        01-03-2019    01-03-2019    0:40:00
C        03-03-2019    03-03-2019    0:27:00
F        02-03-2019    02-03-2019    0:22:00
H        05-03-2019    05-03-2019    0:20:00

Como posso construir uma query para chegar nesse resultado ?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá meu caro, tudo bem?

Em SQL geralmente há mais de uma forma de resolver a mesma situação. A primeira que veio na minha mente e que achei mais simples foi:

SELECT * FROM (
    SELECT *, ROW_NUMBER () OVER (PARTITION BY nome_processo ORDER BY tempo_execucao DESC)
      FROM historico
     WHERE start_time between '2019-03-01' and '2019-03-05'
     ORDER BY nome_processo, tempo_execucao DESC
) r
WHERE row_number = 1
ORDER BY tempo_execucao DESC
LIMIT 5

Achei a sua dúvida muito interessante e vou disponibilizar uma explicação mais detalhada  nome meu canal e no meu site.

Editado por sidneycorreia
neste caso row_number é melhor que o rank
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...