桌子:
UserId, Value, Date.
我想获取UserId,每个UserId的max(Date)值。即,具有最新日期的每个UserId的值。有没有一种方法可以简单地在SQL中做到这一点?(最好是Oracle)
更新: 对于任何歧义,我们深表歉意:我需要获取所有UserIds。但是对于每个UserId,仅该用户具有最新日期的那一行。
这将检索其my_date列值等于该用户ID的my_date最大值的所有行。这可能会为用户ID检索多行,其中最大日期在多行上。
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子句,则默认情况下不应用任何窗口子句,并且不能显式指定任何子句。
该代码有效。