Oracle SQL查询以查找特定用户具有最新条目的所有项目

时间:2015-05-07 11:39:57

标签: sql oracle

我有一个表格,看起来像这样的简化版本,日期值,名称,用户:

enter image description here

我想有一个查询,它为我提供了特定用户具有最新日期的项目。例如,如果我查找用户U1,它将返回A.如果我查找用户U2,它将返回B.它通常会返回几个项目,因为表非常长,用户可以拥有n个项目的最新日期。

我已经尝试了一段时间但没有成功。我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:0)

尝试使用下面的子查询

select * 
from projects P
where P.DateTime = (select max(P1.DateTime)
                  from projects P1
                  where P.User = P1.User 
                 )
and P.User = 'U1'

答案 1 :(得分:0)

SELECT Project FROM
(
SELECT Project, ROW_NUMBER() OVER (PARTITION BY user ORDER BY [DateTime] DESC) AS Rank
FROM table
)
WHERE Rank = 1

如果多个(比方说2个)行具有相同的[DateTime],row_number()将返回1和2作为Rank,如果使用Rank(),它们都将返回1.

答案 2 :(得分:0)

您可以使用分析函数:

select t.*
from (select t.*,
             row_number() over (partition by project order by datetime desc) as seqnum
      from table t
     ) t
where seqnum = 1 and user = SELECTEDUSER;

如果项目在最长日期可以包含多行,请使用rank()dense_rank()代替row_number()

答案 3 :(得分:0)

我能用这个sql完成这个:

SELECT * FROM TABLE WHERE USER = 'USERNAME' AND (PROJECT, DAT) in (SELECT PROJECT, MAX(DAT) as MAXDAT FROM TABELLE GROUP BY PROJECT)