我在留言簿中有一张包含用户评论的表格。列是:id、user_id、title、comment、timestamp。
我需要为每个用户选择最新的行。
我曾尝试使用 group by 执行此操作,但尚未对其进行管理,因为我无法在按 user_id 分组的同一查询中选择任何其他内容:
SELECT user_id, MAX(ts) FROM comments GROUP BY user_id
例如,在此查询中,我无法添加到还选择列 id、tilte 和 comment。如何才能做到这一点?
最佳答案
您可以使用分析函数
SELECT *
FROM (SELECT c.*,
rank() over (partition by user_id order by ts desc) rnk
FROM comments c)
WHERE rnk = 1
根据您希望如何处理关系(如果可以有两行具有相同的
user_id
和 ts
),您可能需要使用 row_number
或 dense_rank
函数而不是 rank
. rank
如果有平局,将允许多行排在第一位。 row_number
如果有平局,将任意返回一行。 dense_rank
会表现得像 rank
对于第一行并列但会认为下一行是第二行而不是第三行,假设两行并列第一。
关于sql - 从 oracle 为每个组选择最新的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404497/