Eliminar linhas redundantes

15/05/2019

9

Olá pessoAll,

Tenho o seguinte resultado de uma query:

Job Rerun Data_Inicio Status
br_cbss_CSGD044 1 2019-05-02 11:33:00.073 200
br_cbss_CSGD044 2 2019-05-02 11:33:00.073 200
br_cbss_PagFor_WF 1 2019-05-02 11:33:19.123 200
br_cbss_Mov_PagFor 1 2019-05-02 11:32:59.637 200
br_cbss_CSGD044 1 2019-05-02 11:32:56.270 200
br_cbss_CSGD044 2 2019-05-02 11:32:56.270 200
br_cbss_PagFor_WF 1 2019-05-02 11:33:15.460 200
br_cbss_Mov_PagFor 1 2019-05-02 11:32:55.897 200
br_cbss_CSGD044 2 2019-05-02 11:32:52.623 200
br_cbss_CSGD044 1 2019-05-02 11:32:52.623 200
br_cbss_PagFor_WF 1 2019-05-02 11:33:10.277 200
br_cbss_Mov_PagFor 1 2019-05-02 11:32:52.217 200
br_cbss_CSGD044 2 2019-05-02 11:32:47.433 200
br_cbss_CSGD044 1 2019-05-02 11:32:47.433 200
br_cbss_PagFor_WF 1 2019-05-02 11:33:05.107 200
br_cbss_Mov_PagFor 1 2019-05-02 11:32:47.040 200

Como vocês podem ver, tenho algumas linhas duplicadas que significam que o "Job", por algum motivo, foi executado duas vezes.
Gostaria que esta query só me mostrasse, nesses casos, a linha onde o Rerun tem o maior valor, descartando a(s) anterior(es).
A query está montada assim:

declare @data_inicial varchar(20)
declare @data_final varchar(20)

--set @data_inicial = convert(varchar(10),DateAdd(DAY,-1,GetDate()),120) + ' 06:00:00'
set @data_inicial = '2019-05-02 00:00:00'
set @data_final = '2019-05-02 23:59:59'
--set @data_final = convert(varchar(10), GetDate(),120) + ' 05:59:59'

select H.name as Job,
E.attempt_count as Rerun,
H.start_time Data_Inicio,
H.status_code as status
from dbo.ops_history H inner join dbo.ops_exec E
on H.task_id = E.task_id
where H.name like 'br_cbss%'
and LEFT(CONVERT(varchar, DATEADD(hh,-3,H.sys_updated_on), 20), 20) between @data_inicial and @data_final
and H.status_code in (140,180,190,200)
group by H.name, E.attempt_count, H.start_time, H.status_code, H.sys_updated_on
order by H.sys_updated_on desc

Agradeço a quem conseguir me ajudar.

Abs,
Responder

Post mais votado

15/05/2019

tente assim:
select	
	H.name as Job,
	max(E.attempt_count) as Rerun,
	H.start_time Data_Inicio,
	H.status_code as status
from
	dbo.ops_history H
inner join dbo.ops_exec E
	on H.task_id = E.task_id
where
	H.name like 'br_cbss%'
	and LEFT(CONVERT(varchar, DATEADD(hh,-3,H.sys_updated_on), 20), 20) between @data_inicial and @data_final
	and H.status_code in (140,180,190,200)
group by
	H.name, H.start_time, H.status_code, H.sys_updated_on
order by
	H.sys_updated_on desc
Responder

Mais Posts

Boa noite Emerson,

Obrigado pelo seu retorno.
Já havia tentado esta opção. Retorna o mesmo resultado, como se ignorasse esta cláusula.

Abs,
Responder
tem certeza??? você testou a instrução que eu te passei?
note que no agrupamento que eu apresentei não há referência ao campo E.attempt_count.
Responder
Bom dia Emerson,

Verdade. Não havia notado isso. Dessa forma funcionou.
Vlw. Muito obrigado pela força.

Abs,
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar