在postgres中按对选择不同的最后消息

时间:2014-02-21 14:54:01

标签: sql postgresql

我有一张包含消息的表:

enter image description here

我需要在两个用户之间进行最后一次日期和时间对话,这就是我的工作:

select  distinct on (user_from, user_to)
*
from messages

这是我得到的:

enter image description here

我确实在两个用户之间获得了一个唯一的会话行,但它不是最后一个。

我应该如何仅选择两个用户之间的最后一个唯一对话?

编辑:预期产出:

enter image description here

2 个答案:

答案 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的标记作为列名!