表:
UserId, Value, Date.
我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)
更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.
我很难在没有搜索同一个表至少两次以获取最大行的情况下执行此操作,然后获取该行的值.有问题的表格很大,所以这是不可接受的.
这是我的表可能是这样的:
SCORES
ID    ROUND    SCORE
1     1        3
1     2        6
1     3        2
2     1        10
2     2        12
3     1        6
我需要返回每个ID在最近一轮中获得的分数.也就是说,行具有最大(圆形),但不是最大分数.
OUTPUT:
ID   ROUND   SCORE
1    3       2
2    2       12
3    1       6
现在我有:
SELECT * FROM 
(SELECT id, round,
CASE WHEN (MAX(round) OVER (PARTITION BY id)) = round THEN score ELSE NULL END score
 FROM
 SCORES
 where id in (1,2,3)
) scorevals
WHERE
scorevals.round is not null;
这是有效的,但效率很低(我必须手动过滤掉所有这些行,当我应该首先不能抓住那些行时.)
我能做些什么来获得正确的价值观?