Dois últimos registros SQL SERVER por coluna ordenado por data.

SQL Server

SQL

12/08/2019

Bom dia, gostaria de uma ajuda para que por SELECT busque os dois últimos registros por uma determinada coluna [des_endereco] conforme exemplo da tabela
data_hora_contagem des_endereco qtd_sku_sistema qtd_sku_contagem
--------------------- ------------------------------------ ------------------ -------------------
2019-04-08 VE592 0 0
2019-05-10 VE592 0 0
2019-06-09 VE592 0 0
2019-07-23 VE592 0 0
2019-06-17 VE591 700 700
2019-07-23 VE591 0 0
2019-04-08 VE591 30 30
2019-05-08 VE590 30 30
2019-06-17 VE590 30 30
2019-07-23 VE590 0 0
2019-04-22 VE589 700 700
2019-05-09 VE589 700 700
2019-08-02 VE589 0 0


Resultado - Os dois ultimos registros de cada des_endereco
data_hora_contagem des_endereco qtd_sku_sistema qtd_sku_contagem
--------------------- ------------------------------------ ------------------ -------------------
2019-06-09 VE592 0 0
2019-07-23 VE592 0 0
2019-07-23 VE591 0 0
2019-04-08 VE591 30 30
2019-06-17 VE590 30 30
2019-07-23 VE590 0 0
2019-05-09 VE589 700 700
2019-08-02 VE589 0 0
Andrei Passos

Andrei Passos

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

12/08/2019

se o teu campo data_hora_contagem realmente gravar data e hora, acredito que a gambiarra abaixo ajude:
select
	ia.*
from
	inventario_andrei ia
left join
	(	select ia.des_endereco, max(ia.data_hora_contagem) dh
		from inventario_andrei ia
		group by ia.des_endereco
	) gr on gr.des_endereco = ia.des_endereco
where
	ia.data_hora_contagem = gr.dh
	or ia.data_hora_contagem = (	select max(ia2.data_hora_contagem)
									from inventario_andrei ia2
									where ia2.des_endereco = ia.des_endereco
										and ia2.data_hora_contagem < gr.dh	)

GOSTEI 0
Andrei Passos

Andrei Passos

12/08/2019

se o teu campo data_hora_contagem realmente gravar data e hora, acredito que a gambiarra abaixo ajude:
select
	ia.*
from
	inventario_andrei ia
left join
	(	select ia.des_endereco, max(ia.data_hora_contagem) dh
		from inventario_andrei ia
		group by ia.des_endereco
	) gr on gr.des_endereco = ia.des_endereco
where
	ia.data_hora_contagem = gr.dh
	or ia.data_hora_contagem = (	select max(ia2.data_hora_contagem)
									from inventario_andrei ia2
									where ia2.des_endereco = ia.des_endereco
										and ia2.data_hora_contagem < gr.dh	)


Boa tarde

Problema é que a data não é unica, ela se repete, então não traz somente os últimos dois registros. na mesma data pode aparecer mais de uma vez o mesmo endereço, tenho exemplo que mostra 4 vezes, eu precisaria buscar os últimos 2 registros.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

12/08/2019


Foi o que eu disse: a gambiarra funciona somente se você gravar data e hora.
Estou tentando encontrar uma solução.
GOSTEI 0
POSTAR