为另一列的每个不同值获取具有该列最大值的行

新手上路,请多包涵

桌子:

 UserId, Value, Date.

我想获取每个 UserId 的 Max(Date) 的 UserId 值。即,每个具有最新日期的 UserId 的值。有没有办法简单地在 SQL 中做到这一点? (最好是甲骨文)

更新: 对任何歧义道歉:我需要获取所有用户 ID。但是对于每个 UserId,只有该用户具有最新日期的那一行。

原文由 Umang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 369
2 个回答

这将检索 my_date 列值等于该用户标识的 my_date 最大值的所有行。这可能会为用户标识检索多行,其中最大日期在多行上。

 select userid,
       my_date,
       ...
from
(
select userid,
       my_date,
       ...
       max(my_date) over (partition by userid) max_my_date
from   users
)
where my_date = max_my_date

“分析函数摇滚”

编辑:关于第一条评论……

“使用分析查询和自联接违背了分析查询的目的”

此代码中没有自联接。相反,在包含分析函数的内联视图的结果上放置了一个谓词——这是一个非常不同的问题,并且是完全标准的做法。

“Oracle 中的默认窗口是从分区中的第一行到当前行”

windowing 子句仅适用于存在 order by 子句的情况。如果没有 order by 子句,默认情况下不应用任何窗口子句,也不能显式指定。

该代码有效。

原文由 David Aldridge 发布,翻译遵循 CC BY-SA 4.0 许可协议

下面的查询可以工作:

 SELECT user_id, value, date , row_number() OVER (PARTITION BY user_id ORDER BY date desc) AS rn
FROM table_name
WHERE rn= 1

原文由 kiruba 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进