sql >> データベース >  >> RDS >> PostgreSQL

ユーザーの受信トレイの最後の会話を取得するためのクエリ

    私の理解によると、(過去10回の最新の会話のうち)ユーザーごとに会話の最新のメッセージを取得する必要があります

    更新: latest_conversation_message_idを取得するようにクエリを変更しました すべてのユーザーの会話に対して

    以下のクエリは、user_id = 2の詳細を取得します 、変更できます、users.id = 2 他のユーザーのために入手するには

    SQLFiddle 、これで目的が解決することを願っています

    SELECT
        user_id, 
        users.name, 
        users2.name as sent_from_or_sent_to,
        subquery.text as latest_message_of_conversation
    FROM
        users
        JOIN
        (
        SELECT
            text,
            row_number() OVER ( PARTITION BY user_id + recipient_id ORDER BY id DESC) AS row_num,
            user_id,
            recipient_id,
            id
        FROM
            private_messages
        GROUP BY
            id,
            recipient_id,
            user_id,
            text
        ) AS subquery ON ( ( subquery.user_id = users.id OR subquery.recipient_id = users.id)  AND row_num = 1 )
        JOIN users as users2 ON ( users2.id = CASE WHEN users.id = subquery.user_id THEN subquery.recipient_id ELSE subquery.user_id END )
    WHERE
        users.id = 2
    ORDER BY
        subquery.id DESC
    LIMIT 10
    

    情報: user_id 2の場合、クエリは他のユーザーとのすべての会話の最新メッセージを取得します 、user_id 3にメッセージを送信します 、会話の開始を示すので、それも表示されます。他のユーザーとのすべての会話の最新メッセージが表示されます



    1. クライアントとサーバー間の接続の構成Oracle10g

    2. mysql:postfix-searchの効率的な方法('%text'別名プレフィックスワイルドカードなど)?

    3. 同じデータで、異なるPKを使用し、フィールドを重複させずに2つのデータベースをマージするにはどうすればよいですか?

    4. STRING_SPLITの改善にご協力ください