Usuário com melhor resposta
Pesquisa valor valido pela data

Pergunta
-
Bom dia a todos!
Gostaria de uma ajuda referente a consulta com datas.
Tenho uma tabela com as seguintes informações.
DATA INICIAL
VALOR
2015-05-04
150
2015-08-15
100
2015-11-01
300
2016-01-01
150
2016-06-01
200
Preciso realizar uma consulta onde eu informe a data e a resposta seja o valor da época.
Ex: Se consultar alguma data de outubro de 2015, a resposta deverá ser 100, já se consultar uma data de julho de 2016, a resposta deverá ser 200.
Qual a melhor lógica a se aplicar neste caso?
Mais uma vez agradeço a todos!!
Respostas
-
Deleted
- Marcado como Resposta Robson William Silva segunda-feira, 5 de setembro de 2016 13:48
Todas as Respostas
-
-
Concordo com o José Diz.
Isso é consulta SQL Básica, recomendo dar uma estudada no básico e fará isso facilmente
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Boa tarde José,
Acho que não soube me explicar. Não consigo identificar como o Order By ou o Top podem me ajudar.
Esta tabela é um exemplo do que preciso fazer... já desenvolvi uma solução com uma procedure em que alimento uma tabela temporária com os valores, mês a mês, do quesito procurado, mas procuro algo mais performático e simples.
Vou colar abaixo outra tabela para tentar exemplificar melhor minha necessidade.
Matricula
Data_altera
VALOR
1
01/05/2015
1500
1
01/08/2015
1800
1
01/11/2015
2000
1
01/01/2016
2200
1
01/06/2016
2500
2
01/01/2014
1000
2
01/03/2015
1250
2
01/07/2015
2000
2
01/04/2016
3000
3
01/01/2016
1500
4
01/04/2015
2500
4
01/10/2015
2700
4
01/03/2016
3000
Digamos que eu tenha uma tabela com o histórico salarial de alguns funcionários e que eu queira buscar o salário da pessoa de acordo com a data pesquisada, só que na maioria das vezes a data pesquisada não estará na tabela.
Se eu executar, por exemplo, a consulta abaixo, o script não retornará resultados.
select valor from tabela where Data_altera =’10/02/2015’ and matricual = 2
Entretanto a resposta que eu necessitaria buscar é 1000, porque a tabela me diz que:
- De 01/01/2014 até 28/02/2015 o salário da matricula 2 foi 1000;
- De 01/03/2015 até 30/06/2015 o salário da matricula 2 foi 1250;
- De 01/07/2015 até 31/03/2016 o salário da matricula 2 foi 2000;
- E de 01/04/2016 até atualmente o salário é 3000.
Realmente não acredito ser uma simples consulta, e se for, realmente não sei o comando ou a lógica necessária para a tornar simples.
Mais uma vez agradeço a ajuda!
-
Acho que não fui claro quanto a resposta e esta foi mal interpretada
quando você faz a seguinte objeção
Bom dia a todos!
Gostaria de uma ajuda referente a consulta com datas.
Tenho uma tabela com as seguintes informações.
DATA INICIAL
VALOR
2015-05-04
150
2015-08-15
100
2015-11-01
300
2016-01-01
150
2016-06-01
200
Preciso realizar uma consulta onde eu informe a data e a resposta seja o valor da época.
Ex: Se consultar alguma data de outubro de 2015, a resposta deverá ser 100, já se consultar uma data de julho de 2016, a resposta deverá ser 200.
Qual a melhor lógica a se aplicar neste caso?
Mais uma vez agradeço a todos!!
Criando essa estrutura em tabela
IF ( OBJECT_ID('TEMPDB..#Tabela') IS NOT NULL ) DROP TABLE #Tabela; CREATE TABLE #Tabela ( DataIncial DATE NOT NULL , Valor INT ); INSERT INTO #Tabela ( DataIncial, Valor ) VALUES ('2015-05-04', 150 ), ('2015-08-15', 100 ), ('2015-11-01', 300), ('2016-01-01', 150), ('2016-06-01', 200)
e atentando a sua pergunta as respostas são
1) SELECT T.Valor FROM #Tabela AS T WHERE T.DataIncial = '2015-08-15'
2)ou isso
DECLARE @VariavelData DATE ='2015-08-15'
SELECT T.Valor FROM #Tabela AS T
WHERE T.DataIncial =@VariavelData3) ou ainda isso
DECLARE @DataInicio DATE ='2016-01-01', @DataTermino DATE ='2016-06-01'
SELECT T.Valor FROM #Tabela AS T
WHERE T.DataIncial BETWEEN @DataInicio AND @DataTerminofoi nesse sentido de enxergando algo muito simples e colocando entre aspas "se for o caso " (de ser um estudando de faculdade)
isso fica muito parecido a trabalho de faculdade , onde o aluno lendo as 10 primeiras paginas de qualquer apostila de sql faz.
acredito que o intuito meu não foi te ofender ou muito menos te menosprezar , e sim apenas de alertar.
Wesley Neves
- Editado Wesley Neves sexta-feira, 2 de setembro de 2016 18:59 replica
-
Boa tarde,
Daniel, experimente fazer uns testes mais ou menos dessa forma:
select top(1) Valor from Tabela where Matricula = 2 and Data_altera <= '10/02/2015' order by Data_altera desc
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
veja se isso resolve
IF ( OBJECT_ID('TEMPDB..#Tabela') IS NOT NULL )
DROP TABLE #Tabela;
SET LANGUAGE 'Brazilian'
CREATE TABLE #Tabela
(
Matricula INT ,
Data_altera DATE NOT NULL ,
Valor INT
);
INSERT INTO #Tabela
(Matricula ,Data_altera, Valor ) VALUES
(1,'01/05/2015', 1500 ),
(1,'01/08/2015', 1800 ),
(1,'01/11/2015', 2000),
(1,'01/01/2016', 2200),
(1,'01/06/2016', 2500),
(2,'01/01/2014', 1000),
(2,'01/03/2015', 1250),
(2,'01/07/2015', 2000),
(2,'01/04/2016', 3000),
(3,'01/01/2016', 1500),
(4,'01/04/2015', 2500),
(4,'01/10/2015', 2700),
(4,'01/03/2016', 3000)
SELECT * FROM #Tabela AS T
DECLARE @DataInicio DATE ='01/01/2014',@DataTermino DATE ='28/02/2015'
SELECT T.Valor FROM #Tabela AS T
WHERE T.Data_altera BETWEEN @DataInicio AND @DataTermino
AND T.Matricula =2
Wesley Neves
Sobre o formado de data se o seu insert estiver nesse formato "06/03/2013" o resultado sera esse no banco '2013-06-03'
como demostro abaixo
SET LANGUAGE 'Brazilian'
select @@LANGUAGE
SELECT CAST(' ' AS DATE) [FULLDATE], MONTH(CAST('06/03/2013' AS DATE)) [MONTH], DAY(CAST('06/03/2013' AS DATE)) [DAY]
SET LANGUAGE 'English'
select @@LANGUAGE
SELECT CAST('06/03/2013' AS DATE) [FULLDATE], MONTH(CAST('06/03/2013' AS DATE)) [MONTH], DAY(CAST('06/03/2013' AS DATE)) [DAY]- Editado Wesley Neves sexta-feira, 2 de setembro de 2016 19:58 adendo
-
Deleted
- Marcado como Resposta Robson William Silva segunda-feira, 5 de setembro de 2016 13:48
-
Bom dia,
Devido a falta de resposta do usuário
essa thread está sendo fechada.
Se o problema ainda estiver ocorrendo,
favor abrir uma nova thread.Atenciosamente,
Robson William Silva
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.