none
Query para obter as ultimas mensagens de cada conversa em privado RRS feed

  • Pergunta

  • Boa noite pessoal, estou desenvolvendo um app com React Native similar ao WhatsApp, e então preciso na tela principal mostrar a última mensagem que X usuário mandou ou recebeu do seu contato.

    A tabela no banco de dados, já com os registros (para testes) que tenho é algo semelhante a isso:

    id  my_id to_user message
    1 1 2 a1
    2 1 2 a2
    3 2 1 a3
    4 2 1 a4
    5 3 2 a5
    6 1 2 a6
    4 3 a7
    8 1 2 a8
    9 2 1 a9
    10 1 a10


    No app após o login é guardado o meu id que nesse cenário é oe depois na tela inicial tem que ser mostrada as últimas mensagens, seja ela mandada por mim ou enviada para mim, nesse exemplo de tabela acima, os dados que precisam ser retornados de forma única seriam:

    id my_id to_user message
    9 2 1 a9
    10 5 1 a10


    Ou seja a última conversa entre o usuário 1 e 2 foi a do id 9 e o usuário 5 mandou mensagem para o usuário 1 e essa até então foi a última mensagem.

    Tentei várias formas, mas infelizmente não consegui, alguém poderia me ajudar?

    SELECT * FROM test WHERE my_id = 1 OR to_user = 1
    

    Nessa query acima retornar todas as mensagens enviadas por mim ou para mim, mas precisaria da verificação sobre a última mensagem enviada nessa conversa.

    obs: existe nessa tabela a coluna created_at quer seria a data de criação da mensagem, tentei pegar a max date mas sem sucesso.

    segunda-feira, 20 de julho de 2020 01:31

Respostas

  • Bom dia,

    Experimente fazer uns testes utilizando a função Row_Number mais ou menos dessa forma:

    with CTE_RN as
    (
        SELECT 
            *, 
            ROW_NUMBER() OVER(
                PARTITION BY CASE WHEN my_id = 1 then to_user else my_id end
                ORDER BY created_at) as RN
        FROM test 
        WHERE my_id = 1 OR to_user = 1
    )
    
    select * from CTE_RN where RN = 1

    Espero que ajude


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

    • Marcado como Resposta Sup3r-Us3r segunda-feira, 20 de julho de 2020 15:08
    segunda-feira, 20 de julho de 2020 10:59

Todas as Respostas