Usuário com melhor resposta
Consultar última data e retornar valores

Pergunta
-
Olá pessoal !
Estou desenvolvendo um programa para Avaliação Física, porém estou com uma dificuldade na hora da consulta.
Tenho as seguintes tabelas :
TABELA: tblClientes, com os campos Codigo, Nome, Sexo, DataNascimento (e outros)
TABELA: tblAvaliacoesFisicas, com os campos CodigoAvaliacao, CodigoCliente, DataAvaliacao, DataProximaAF (e outros)
MINHA DIFICULDADE: Preciso consultar um determinado cliente e ele me retornará:
Nome, Sexo, DataNascimento, que estão na tblClientes e a ULTIMA DataAvaliacao, DataProximaAF, que estão na tblAvaliacoesFisicas
Se alguém puder me ajudar ....
Respostas
-
Boa tarde,
Experimente dessa forma:
select c.Codigo, c.Nome, c.Sexo, c.DataNascimento, ca.DataAvaliacao, ca.DataProximaAF from tblClientes as c cross apply ( select top(1) af.DataAvaliacao, af.DataProximaAF from tblAvaliacoesFisicas as af where af.CodigoCliente = c.Codigo
order by
af.DataAvaliacao desc ) as ca
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex quarta-feira, 19 de julho de 2017 17:05
- Sugerido como Resposta Vinicius_Fonseca quarta-feira, 19 de julho de 2017 17:19
Todas as Respostas
-
Olá, tente isto
SELECT tblClientes.Nome ,tblClientes.Sexo ,tblClientes.DataNascimento ,tblAvaliacoesFisicas.DataAvaliacao ,tblAvaliacoesFisicas.DataProximaAF FROM tblClientes LEFT JOIN tblAvaliacoesFisicas ON tblClientes.CodigoCliente = tblAvaliacoesFisicas.CodigoCliente
- Sugerido como Resposta Vinicius_Fonseca quarta-feira, 19 de julho de 2017 17:14
- Não Sugerido como Resposta Vinicius_Fonseca quarta-feira, 19 de julho de 2017 17:14
-
Boa tarde,
Experimente dessa forma:
select c.Codigo, c.Nome, c.Sexo, c.DataNascimento, ca.DataAvaliacao, ca.DataProximaAF from tblClientes as c cross apply ( select top(1) af.DataAvaliacao, af.DataProximaAF from tblAvaliacoesFisicas as af where af.CodigoCliente = c.Codigo
order by
af.DataAvaliacao desc ) as ca
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex quarta-feira, 19 de julho de 2017 17:05
- Sugerido como Resposta Vinicius_Fonseca quarta-feira, 19 de julho de 2017 17:19
-
Segue uma outra abordagem
DECLARE @tblClientes TABLE ( Codigo INT IDENTITY(1, 1) , Nome VARCHAR(50) , DataNascimento DATE ); INSERT INTO @tblClientes ( Nome , DataNascimento ) VALUES ( 'Cliente 1' , DATEADD(YEAR, -30, GETDATE()) ); DECLARE @tblAvaliacoesFisicas TABLE ( CodigoAvaliacao INT IDENTITY(1, 1) , CodigoCliente INT , DataAvaliacao DATE , DataProximaAF DATE ); INSERT INTO @tblAvaliacoesFisicas ( CodigoCliente, DataAvaliacao, DataProximaAF ) VALUES ( 1, DATEADD(MONTH, -1, GETDATE()), DATEADD(WEEK, -3, GETDATE()) ), ( 1, DATEADD(WEEK, -3, GETDATE()), DATEADD(WEEK, -2, GETDATE()) ), ( 1, DATEADD(WEEK, -2, GETDATE()), DATEADD(WEEK, -1, GETDATE()) ), ( 1, GETDATE(), DATEADD(WEEK, 1, GETDATE()) ), ( 1, DATEADD(WEEK, 1, GETDATE()), DATEADD(WEEK, 2, GETDATE()) ); WITH Dados AS ( SELECT TAF.CodigoAvaliacao , TAF.CodigoCliente , TAF.DataAvaliacao, UltimaReavaliacao = MAX(TAF.DataAvaliacao) OVER ( PARTITION BY CodigoCliente ) , TAF.DataProximaAF FROM @tblAvaliacoesFisicas AS TAF ) SELECT TC.Codigo , TC.Nome , TC.DataNascimento , REA.UltimaReavaliacao, REA.DataProximaAF FROM @tblClientes AS TC JOIN ( SELECT R.CodigoAvaliacao , R.CodigoCliente , R.DataAvaliacao, R.UltimaReavaliacao , DataProximaAF = ( SELECT TOP 1 R2.DataProximaAF FROM @tblAvaliacoesFisicas R2 WHERE R2.CodigoCliente = R.CodigoCliente AND R2.DataProximaAF > R.UltimaReavaliacao ) FROM Dados R ) AS REA ON REA.CodigoCliente = TC.Codigo AND REA.DataAvaliacao = REA.UltimaReavaliacao
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves