LINUX.ORG.RU

История изменений

Исправление theNamelessOne, (текущая версия) :

Можно попробовать через DISTINCT ON:

   select distinct on(least(sender_id, recipient_id),
                      greatest(sender_id, recipient_id))
          *
     from chat_messages
 order by least(sender_id, recipient_id)
        , greatest(sender_id, recipient_id)
        , id desc;

Можно ещё вместо id desc использовать created_at desc (если индекс есть).

Но я бы просто последние сообщения в отдельную таблицу клал upsert-ом. Ну или поудобнее структуру БД придумал.

Исправление theNamelessOne, :

Можно попробовать через DISTINCT ON:

   select distinct on(least(sender_id, recipient_id),
                      greatest(sender_id, recipient_id))
          *
     from chat_messages
 order by least(sender_id, recipient_id)
        , greatest(sender_id, recipient_id)
        , id desc;

Можно ещё вместо id desc использовать created_at desc (если индекс есть).

Но я бы просто последние сообщения в отдельную таблицу клал upsert-ом.

Исходная версия theNamelessOne, :

Можно попробовать через DISTINCT ON:

   select distinct on(least(sender_id, recipient_id),
                      greatest(sender_id, recipient_id))
          *
     from chat_messages
 order by least(sender_id, recipient_id)
        , greatest(sender_id, recipient_id)
        , id desc;

Можно ещё вместо id desc использовать created_at desc (если индекс есть).

Но я бы просто последние сообщения в отдельную таблицу клал upsert-ом.