Sql 如何从表中选择*但在1列上不同,在另一列上按顺序排序
我有一个消息表,其中有字段channel_number、body、created_at、recipeint_id和sender_id。我希望在channel_number和order by messages上有不同的消息。created_at 基本上我想在分页中显示所有频道,带有最新消息的频道将位于顶部。这就是我尝试过的:Sql 如何从表中选择*但在1列上不同,在另一列上按顺序排序,sql,postgresql,Sql,Postgresql,我有一个消息表,其中有字段channel_number、body、created_at、recipeint_id和sender_id。我希望在channel_number和order by messages上有不同的消息。created_at 基本上我想在分页中显示所有频道,带有最新消息的频道将位于顶部。这就是我尝试过的: SELECT * FROM messages where id IN ( (SELECT channel_number, MIN(id) AS messages_id
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;
我已经为此工作了几个小时,并进行了许多查询,但它不起作用,因为在结果中,我需要消息的所有字段,而不是所选的频道和id
编辑-我使用的是postgres,消息表中的通道号没有uniq约束。在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);
在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);
这对我有好处
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
这对我有好处
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
按第2列asc/desc从表顺序中选择不同的第1列 按第2列asc/desc从表顺序中选择不同的第1列 请提供一些示例数据。您正在运行MySQL还是Postgres?请仅标记相关数据库。其postgres…在决定为每个频道编号保留哪一行时,是否希望按created_at排序,或者你是用其他方法选择不同的行,然后按通道号排序最终结果?我已经给出了答案,我想你会理解的。请包含一些示例数据。你是运行MySQL还是Postgres?请只标记相关的数据库。它的postgres…在决定为每个频道号码保留哪一行时,您是希望按created_at排序,还是以其他方式选择不同的行,然后按频道号码排序最终结果?我已经给出了答案,我想您会理解的