Valores repetidos

PostgreSQL

23/03/2019

Srs.,

Fiz uma query onde preciso relacionar os 5 processos com maior tempo de duração, para isso fiz o select abaixo:

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

O problema é que o nome_processo aparece mais de uma vez neste select
ex:
nome_processo start_time end_time tempo_execução
A 01-03-2019 01-03-2019 0:45:00
B 01-03-2019 01-03-2019 0:40:00
A 02-03-2019 02-03-2019 0:30:00
D 03-03-2019 03-03-2019 0:28:00
B 03-03-2019 03-03-2019 0:27:00

E na verdade o resultado que eu preciso seria:

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

Como faço para não trazer registros duplicados e ordenar por tempo de execução.

Desde já agradeço.
Tulio Norberto

Tulio Norberto

Curtidas 0

Melhor post

Hélio Devmedia

Hélio Devmedia

24/03/2019

Olá Tulio, tudo bem?


Este SQL é simples demais e não deveria estar dando este tipo de erro, exceto se, realmente existe processos com o mesmo nome ou o índice está corrompido fazendo com que na busca ele repita o nome.

Sugiro verificar se não está havendo processos com o mesmo nome e sugiro também excluir e criar um novo index para fazer esta consulta.]


Qualquer coisa, pode perguntar novamente, só não esqueça de curtir o tópico para que eu receba a notificação que você respondeu.


Espero ter ajudado,
Um forte abraço e fique com Deus!
GOSTEI 1

Mais Respostas

Tulio Norberto

Tulio Norberto

23/03/2019

Olá Tulio, tudo bem?


Este SQL é simples demais e não deveria estar dando este tipo de erro, exceto se, realmente existe processos com o mesmo nome ou o índice está corrompido fazendo com que na busca ele repita o nome.

Sugiro verificar se não está havendo processos com o mesmo nome e sugiro também excluir e criar um novo index para fazer esta consulta.]


Qualquer coisa, pode perguntar novamente, só não esqueça de curtir o tópico para que eu receba a notificação que você respondeu.


Espero ter ajudado,
Um forte abraço e fique com Deus!
GOSTEI 0
Tulio Norberto

Tulio Norberto

23/03/2019

Hélio, boa tarde

Existe sim valores repetidos, porque o processos executam diariamente

por exemplo:

O processo "A" executa todos os dias, o "B" o "C" o "D" e assim por diante. 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 esta query 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 no exemplo citado:
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
GOSTEI 0
Hélio Devmedia

Hélio Devmedia

23/03/2019

Então Tulio, com este sql que você postou não é possível, e ainda ficou difícil de entender, talvez temos que reformular a idéia do que buscar:

Se você quer os 5 primeiros processos que mais demoraram para executar durante um período de 5 dias ('01-03-2019' and '05-03-2019' ) e o processo A, todos os dias foi o mais demorado, então o Processo A obrigatoriamente vai aparecer 5 vezes porque mesmo ele chamando A, para o banco, são registros diferentes e são os que mais demoraram.

Se por outro lado você quer somar o total de processos e ver qual demorou mais, deveria fazer assim:

select * from (
select 
   nome_processo,
   SUM(tempo_execucao)
from 
   historico
where 
   start_time between '01-03-2019' and '05-03-2019' 
group By
   nome_processo
)
order by tempo_execucao desc limit 5



Este código soma o tempo dos processos antes de ordenar os 5 primeiros.

Espero ter dado um norte...



GOSTEI 0
POSTAR