【发布时间】:2020-01-29 04:00:04
【问题描述】:
我有这个问题:
WITH messages_ranked
AS (
SELECT p.Date, p.RecipientId, p.RecipientType, p.Id, p.text, p.userId,
ROW_NUMBER() OVER(PARTITION BY p.RecipientId, p.userId
ORDER BY p.Id DESC)
AS rk
FROM ChatMessages p
JOIN ChatGroupMemberships as g
ON p.recipientId = g.groupId
WHERE g.userId = XXX <-- user id
)
SELECT date, recipientId as groupId, recipientType as groupType, id, text, userId, rk
FROM messages_ranked s
where rk = 1
Order BY s.date DESC
这给了我这个:
我需要减少此查询的结果行,以便对于每个唯一的 groupId,只返回最高值为 date 的行。
例如,前三行仅返回第一行,因为它们共享相同的groupId,并且第一行具有最新的日期。
我尝试在How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL? 处遵循示例,因为我的问题密切相关,但我似乎做错了。
【问题讨论】:
-
这适用于哪个 RDBMS?请添加标签以指定您使用的是
mysql、postgresql、sql-server、oracle还是db2- 或者完全是其他东西。
标签: sql