我有下表
create table messages(
id bigserial primary key,
created_at timestamp with time zone,
message text,
from_id bigint,
to_id bigint
);
我使用以下查询选择所有唯一的对话
SELECT DISTINCT ON (LEAST(from_id, to_id), GREATEST(from_id, to_id))
id, message, created_at
FROM messages
ORDER BY LEAST(from_id, to_id), GREATEST(from_id, to_id), created_at DESC;
但我想改一下这样我就能收到每次对话的最后一条信息。不是第一个。你知道我该怎么做吗是否可以使用不同的查询?
1条答案
按热度按时间vybvopom1#
如果
created_at
被定义为NOT NULL
(只是没有显示出来),那么查询已经完成了所要求的操作。参见:
如果每对有许多消息,那么不同的查询样式将执行得更好。
对于few,
DISTINCT ON
刚刚好。