我有一个表格,看起来像这样的简化版本,日期值,名称,用户:
我想有一个查询,它为我提供了特定用户具有最新日期的项目。例如,如果我查找用户U1,它将返回A.如果我查找用户U2,它将返回B.它通常会返回几个项目,因为表非常长,用户可以拥有n个项目的最新日期。
我已经尝试了一段时间但没有成功。我怎样才能做到这一点?
答案 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)