Запрос MySQL для извлечения последней записи из каждой группы, содержащей 2 столбца

Я пишу запрос MySQL (MariaDB), чтобы получить список отправителей, с которых пользователь получил сообщение. Как и в папке «Входящие» в Facebook, я хочу, чтобы первые отправители появлялись, и я уже уже выполнил следующий запрос:

SELECT  DISTINCT user_id_s
    FROM  messages
    WHERE  id IN (
        SELECT  MAX(id)
            FROM  messages
            WHERE  user_id_r=390
            GROUP BY  user_id_s
                 )
    order by  id DESC 

Кажется, он работает нормально (не уверен, что он будет работать отлично с большими записями, например, миллион строк?). Но реальная проблема заключается в том, что она выбирается только в том случае, если последнее сообщение было получено пользователем, а не последним.

Пример:

Пользователь 390 получил сообщения от следующих пользователей в этом порядке:

  1. 385
  2. 421
  3. 422
  4. 423
  5. 424
  6. 429
  7. 430
  8. 431

Таким образом, теперь пользователь 431 является самым последним и появляется в верхней части списка, но если пользователь 390 ответил пользователю 431, он остается внизу, пока я хочу, чтобы это отображалось сверху в зависимости от последнего взаимодействия.

Надеюсь, я объяснил это хорошо.

EDIT: вот скрипт SQL: http://sqlfiddle.com/#!9/82417/2

В этом примере идентификатор строки с «573» должен отображаться в верхней части строки # 572, а остальная часть результата должна оставаться такой же. Также второй столбец с user_id_s должен дать «431» в первой строке, как и сейчас.

mysql,sql,mariadb,

1

Ответов: 1


0

Определение «последний»: вместо этого MAX(id)вам нужно

SELECT id
    FROM messages
    WHERE ...
    ORDER BY last_replied DESC
    LIMIT 1

Масштабирование: см. Groupwise Max .

MySQL, SQL, MariaDB,
Похожие вопросы