桌子:
UserId, Value, Date.
我想获取每个 UserId 的 Max(Date) 的 UserId 值。即,每个具有最新日期的 UserId 的值。有没有办法简单地在 SQL 中做到这一点?(最好是甲骨文)
更新: 对任何歧义道歉:我需要获取所有用户 ID。但是对于每个 UserId,只有该用户具有最新日期的那一行。
这将检索 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 子句,默认情况下不应用任何窗口子句,也不能显式指定。
该代码有效。