我有一张包含消息的表:
我需要在两个用户之间进行最后一次日期和时间对话,这就是我的工作:
select distinct on (user_from, user_to)
*
from messages
这是我得到的:
我确实在两个用户之间获得了一个唯一的会话行,但它不是最后一个。
我应该如何仅选择两个用户之间的最后一个唯一对话?
编辑:预期产出:
答案 0 :(得分:1)
我是这样做的:
SELECT DISTINCT ON (user_from, user_to) *
FROM messages
ORDER BY user_from, user_to, date+time DESC
答案 1 :(得分:0)
您可以使用Window Functions
实现此目的SELECT *
FROM
(select *, rank() OVER (PARTITION BY date, user_from,user_to ORDER BY time desc ) AS pos
FROM messages
) AS msg
WHERE pos = 1
我强烈建议你注意使用PostgreSQL的标记作为列名!