none
Pegar data mais recente RRS feed

  • Pergunta

  • Galera tenho a seguinte query:

     select Cha.IdChat,Cli.Nome as 'Nome Cliente',Cha.mensagem as Mensagem,Cha.dataHora as Data,Cha.status_2,Cli.IdCliente,Func.IdFuncionario from tblChat Cha
     inner join tblCliente Cli on Cha.IdCliente = Cli.IdCliente
     left join tblFuncionario Func on Func.IdFuncionario = Cha.IdFuncionario
     where Cha.status_2 = 0 

    Nela eu tenho um retorno de várias linhas com várias datas porém para cada código que eu tenho só realmente me interessa ter as informações da data mais recente. Alguém poderia me ajudar com alguma possível forma de fazer isso?

    Sei que tem que agrupar com o Group By, porém nunca fiz.

    Att,

    Gabriel Coutinho

    quarta-feira, 18 de maio de 2016 19:50

Respostas

  • Boa tarde,

    Gabriel, você quer obter a linha mais recente de cada cliente?

    Experimente fazer uns testes dessa forma: 

    with CTE_RN as
    (
        select 
            IdChat,
            mensagem,
            dataHora,
            status_2,
            IdCliente,
            IdFuncionario,
            ROW_NUMBER() OVER(PARTITION BY IdCliente ORDER BY dataHora DESC) as RN 
        from tblChat
        where 
            status_2 = 0 
    )
    
    select 
        Crn.IdChat,
        Cli.Nome as 'Nome Cliente',
        Crn.mensagem as Mensagem,
        Crn.dataHora as Data,
        Crn.status_2,
        Crn.IdCliente,
        Crn.IdFuncionario
    from CTE_RN as Crn
    inner join tblCliente Cli on Cli.IdCliente = Crn.IdCliente
    -- left join tblFuncionario Func on Func.IdFuncionario = Crn.IdFuncionario
    where 
        Crn.RN = 1

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 18 de maio de 2016 20:07

Todas as Respostas

  • Partindo do princípio que o campo dataHora é do tipo datetime:

    SELECT Cha.idchat, 
           Cli.nome     AS 'Nome Cliente', 
           Cha.mensagem AS Mensagem, 
           Cha.datahora AS Data, 
           Cha.status_2, 
           Cli.idcliente, 
           Func.idfuncionario 
    FROM   tblchat Cha 
           INNER JOIN tblcliente Cli 
                   ON Cha.idcliente = Cli.idcliente 
           LEFT JOIN tblfuncionario Func 
                  ON Func.idfuncionario = Cha.idfuncionario 
    WHERE  Cha.status_2 = 0 
    GROUP  BY Cha.idchat, 
              Cli.nome AS 'Nome Cliente', 
              Cha.mensagem AS mensagem, 
              Cha.datahora AS data, 
              Cha.status_2, 
              Cli.idcliente, 
              Func.idfuncionario 
    ORDER  BY Cha.datahora DESC 

    Da data mais recente para a mais antiga.

    Abs.

    quarta-feira, 18 de maio de 2016 20:03
  • Boa tarde,

    Gabriel, você quer obter a linha mais recente de cada cliente?

    Experimente fazer uns testes dessa forma: 

    with CTE_RN as
    (
        select 
            IdChat,
            mensagem,
            dataHora,
            status_2,
            IdCliente,
            IdFuncionario,
            ROW_NUMBER() OVER(PARTITION BY IdCliente ORDER BY dataHora DESC) as RN 
        from tblChat
        where 
            status_2 = 0 
    )
    
    select 
        Crn.IdChat,
        Cli.Nome as 'Nome Cliente',
        Crn.mensagem as Mensagem,
        Crn.dataHora as Data,
        Crn.status_2,
        Crn.IdCliente,
        Crn.IdFuncionario
    from CTE_RN as Crn
    inner join tblCliente Cli on Cli.IdCliente = Crn.IdCliente
    -- left join tblFuncionario Func on Func.IdFuncionario = Crn.IdFuncionario
    where 
        Crn.RN = 1

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 18 de maio de 2016 20:07
  • Obrigado por responder, verifiquei aqui funcionou, porém eu só precisava do ultimo mesmo. 

    Mas valew por responder vou utilizar em outra funcionalidade no meu projeto

    quarta-feira, 18 de maio de 2016 20:24
  • Isso mesmo gapimex.

    Showw , muito obrigado.

    Vlw msm, testei aqui e funcionou!!

    quarta-feira, 18 de maio de 2016 20:25