SELECIONAR REGISTROS PARA UMA DATA ESPECÍFICA

SQL Server

23/09/2016

Pessoal, preciso de uma ajuda, tenho uma tabela que tem os seguintes dados:
Já tentei com MAX(), COM TOP 1, nas não consigo trazer os 2 registros apenas.

CHAPA NOVA SITUACAO DATAMUDANCA
104193 A 05/08/2015
104193 F 06/10/2015
104193 A 06/11/2015
105000 A 01/05/2015
105000 F 01/12/2015
105000 A 01/01/2016

Preciso fazer um SELECT que quando eu inserir uma determinada data ele me traga a situação imediatamente ANTERIOR OU IGUAL àquela data, por exemplo:

Quero a situação que encontrava-se no dia 31/01/2016, ele me traria:

104193 A 06/11/2015
105000 A 01/01/2016
Marcelo Manzini

Marcelo Manzini

Curtidas 0

Mais Respostas

Luiz Santos

Luiz Santos

23/09/2016

Marcelo, não sei se é a solução mais correta, mas foi a única que consegui pensar no momento.


IF OBJECT_ID(N'TEMPDB..#TESTE') IS NOT NULL
	DROP TABLE #TESTE

CREATE TABLE #TESTE(
CHAPA VARCHAR(50),
NOVA_SITUACAO CHAR(1),
DATAMUDANCA DATE
)

INSERT INTO #TESTE VALUES
('104193','A',CONVERT(DATE, '05/08/2015', 103)),
('104193','F',CONVERT(DATE, '06/10/2015', 103)),
('104193','A',CONVERT(DATE, '06/11/2015', 103)),
('105000','A',CONVERT(DATE, '01/05/2015', 103)),
('105000','F',CONVERT(DATE, '01/12/2015', 103)),
('105000','A',CONVERT(DATE, '01/01/2016', 103))


SELECT #TESTE.*
  FROM #TESTE 
       INNER JOIN(	SELECT CHAPA
						 , MAX(DATAMUDANCA) AS DATAMUDANCA 
					  FROM #TESTE 
					 WHERE DATAMUDANCA <= '2016-01-31'
					GROUP BY CHAPA) AS FILTRO ON FILTRO.CHAPA = #TESTE.CHAPA AND FILTRO.DATAMUDANCA = #TESTE.DATAMUDANCA

GOSTEI 0
Marcelo Manzini

Marcelo Manzini

23/09/2016

Obrigado Luiz, era isso mesmo, dessa forma deu certo, apenas inseri alguns filtros pra fechar a consulta.

Vlw
GOSTEI 1
POSTAR