none
Consultar última data e retornar valores RRS feed

  • 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 ....

    quarta-feira, 19 de julho de 2017 16:53

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
    quarta-feira, 19 de julho de 2017 17:04

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
    quarta-feira, 19 de julho de 2017 17:03
  • 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
    quarta-feira, 19 de julho de 2017 17:04
  • 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

    quarta-feira, 19 de julho de 2017 18:03