Eliminar linhas redundantes

Banco de Dados

15/05/2019

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,
Aloysio Coutinho

Aloysio Coutinho

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

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
GOSTEI 1

Mais Respostas

Aloysio Coutinho

Aloysio Coutinho

15/05/2019

Boa noite Emerson,

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

Abs,
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

15/05/2019

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.
GOSTEI 0
Aloysio Coutinho

Aloysio Coutinho

15/05/2019

Bom dia Emerson,

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

Abs,
GOSTEI 0
POSTAR