【发布时间】:2020-04-25 11:31:25
【问题描述】:
我想打印一个人的最后一条消息,但每个人只能打印他的最新消息。我使用 PostgreSQL 10。
+-----------+----------+--------------+
| name | body | created_at |
+-----------+----------+--------------+
| Maria | Test3 | 2017-07-07 |
| Paul | Test5 | 2017-06-01 |
+-----------+----------+--------------+
我已经用下面的 SQL 查询尝试过,这给了我确切的回报,但不幸的是,人们在其中翻了一番。
SELECT * FROM messages
WHERE receive = 't'
GROUP BY name
ORDER BY MAX(created_at) DESC
+-----------+----------+--------------+
| name | body | created_at |
+-----------+----------+--------------+
| Maria | Test1 | 2016-06-01 |
| Maria | Test2 | 2016-11-01 |
| Maria | Test3 | 2017-07-07 |
| Paul | Test4 | 2017-01-01 |
| Paul | Test5 | 2017-06-01 |
+-----------+----------+--------------+
我尝试使用 DISTINCT 删除重复项,但不幸的是我收到以下错误消息:
SELECT DISTINCT ON (name) * FROM messages
WHERE receive = 't'
GROUP BY name
ORDER BY MAX(created_at) DESC
ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions LINE 1: SELECT DISTINCT ON (name) * FROM messages ^ : SELECT DISTINCT ON (name) * FROM messages WHERE receive = 't' GROUP BY name ORDER BY MAX(created_at) DESC
您有什么想法可以解决这个问题吗?
【问题讨论】:
标签: sql postgresql sql-order-by distinct greatest-n-per-group