Как выбрать * из таблицы, но отличается в 1 столбце и упорядочить в другом столбце - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть таблица сообщений с полями channel_number, body, creation_at, recipeint_id & sender_id. Я хочу, чтобы сообщения различались по channel_number и упорядочены по messages.created_at

В основном я хочу показать все каналы в пагинациях и каналах. с последним сообщением будет наверху. Вот что я попробовал:

SELECT * 
FROM messages 
where id IN ( (SELECT channel_number, MIN(id) AS messages_id 
               FROM messages 
               GROUP BY channel_number
              ) as a
           ) a.messages_id 
ORDER BY a.messages_id DESC;

Я работал над этим пару часов и сделал много запросов, но это не сработало, потому что в результатах мне нужны все поля сообщения вместо выбранных channel и id.

Правки - я использую postgres, и в таблице сообщений

нет ограничений uniq на channle_number.

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

В PostgreSQL вы можете сделать:

select distinct on (channel_number) m.*
from messages m
order by channel_number, id desc;

Вы также можете использовать коррелированный подзапрос:

select m.*
from messages m
where m.id = (select max(m1.id) from messages m1 where m1.channel_number = m.channel_number);
0 голосов
/ 24 февраля 2020

выбор отдельного столбца_1 из порядка таблицы по столбцу 2 asc / desc;

0 голосов
/ 24 февраля 2020

Это сработало хорошо для меня

SELECT *
FROM messages
where (channel_number, id) IN (select channel_number, MIN(id) AS last_message_id
                                FROM "messages"
                                WHERE (sender_id = 3 OR recipient_id =2)
                               )
GROUP BY "messages"."channel_number"
ORDER BY created_at DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...