none
Dúvida com Select não Resolvido RRS feed

  • Pergunta

  • Olá Amigos,

    No post http://social.msdn.microsoft.com/Forums/en-US/520/thread/55df8eb0-fef1-4cc7-8bef-addb7d0f998c obtive ajuda para realizar um select, mas após fazer alguns testes, verifiquei que o resultado que realmente preciso não consegui obter.  Eu tenho abaixo os seguintes registros em uma tabela: 

       O que eu preciso é retornar o registro mais recente de cada Usuário que esteja relacionado com o usuario 4 - Pedro. O resultado deverá ser algo como abaixo:

      

      Ou seja, para cada usuario relacionado com o Pedro deve resultar o registro mais recente, estando o Pedro no ID_From ou no ID_TO.

       Tentei de inumeras formas, utilizando union com CTE, mas não obtive corretamente o resultado esperado.

       Agradeço desde já.

       Cristiano

    quinta-feira, 18 de abril de 2013 14:04

Respostas

  • Bom dia,

    Experimente dessa forma:

    with CTE_R as
    (
        select
            *,
            ROW_NUMBER() OVER
                    (PARTITION BY case when ID_From = 4 then ID_To else ID_From end
                     ORDER BY MsgTime DESC) as RowNum
        from Tabela
        where 
            ID_From = 4 or
            ID_To = 4
    )
    
    select * from CTE_R
    where RowNum = 1

    Espero que ajude.


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

    • Marcado como Resposta Cristiano Testai quinta-feira, 18 de abril de 2013 15:20
    quinta-feira, 18 de abril de 2013 14:25

Todas as Respostas

  • Bom dia,

    Experimente dessa forma:

    with CTE_R as
    (
        select
            *,
            ROW_NUMBER() OVER
                    (PARTITION BY case when ID_From = 4 then ID_To else ID_From end
                     ORDER BY MsgTime DESC) as RowNum
        from Tabela
        where 
            ID_From = 4 or
            ID_To = 4
    )
    
    select * from CTE_R
    where RowNum = 1

    Espero que ajude.


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

    • Marcado como Resposta Cristiano Testai quinta-feira, 18 de abril de 2013 15:20
    quinta-feira, 18 de abril de 2013 14:25
  • Bom dia,

    Experimente dessa forma:

    with CTE_R as
    (
        select
            *,
            ROW_NUMBER() OVER
                    (PARTITION BY case when ID_From = 4 then ID_To else ID_From end
                     ORDER BY MsgTime DESC) as RowNum
        from Tabela
        where 
            ID_From = 4 or
            ID_To = 4
    )
    
    select * from CTE_R
    where RowNum = 1

    Espero que ajude.


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

           Obrigado Gapimex! Pelos testes que fiz aqui era isso que eu precisava.. não conhecia bem o Row_Number() OVER (Partition by)...
    quinta-feira, 18 de abril de 2013 15:23