Jump to content
Fórum Script Brasil
  • 0

valores duplicados


Question

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 to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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.

Edited by sidneycorreia
neste caso row_number é melhor que o rank
Link to post
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.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148682
    • Total Posts
      644515
×
×
  • Create New...