[英]Sql group by max column value after CTE
我有這個查詢:
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
並且第一行具有最新日期。
我試圖在這里遵循示例如何通過 SQL 中的另一列選擇具有 MAX(Column value), DISTINCT 的行? 因為我的問題密切相關,但我似乎做對了。
我猜這可以滿足您的需求:
WITH messages_ranked AS (
SELECT p.Date, p.RecipientId, p.RecipientType, p.Id, p.text, p.userId,
ROW_NUMBER() OVER (PARTITION BY p.RecipientId ORDER BY p.dATE DESC) AS seqnum
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, seqnum
FROM messages_ranked s
WHERE seqnum = 1
ORDER BY s.date DESC ;
我認為您不需要使用row_number()
兩次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.