小编典典

获取列的最大值所在的行

all

桌子:

UserId, Value, Date.

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

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


阅读 114

收藏
2022-03-04

共1个答案

小编典典

这将检索 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 子句,默认情况下不应用任何窗口子句,也不能显式指定。

该代码有效。

2022-03-04