我有一张类似于此的表
Table(Id int, PropertyId int, UserId int, AccesedOn datetime)
因此,该表可以为一个用户的一个属性赋值,但不同的时间。
Eg.
1,100,5, 2012-10-16 16:24:48
2,100,5, 2012-10-17 11:22:00
3,100,5, 2012-10-18 17:10:05
我在这里尝试的是为特定用户选择不同的属性,但按最近的访问时间排序。
此外,我将此表连接到其他三个表,这些表导致提供重复值。因此,我必须使用DISTINCT
命令。
我遇到问题是因为我在执行orderby AccesedOn
时,它需要出现在select语句中,因为 AccesedOn 列不会带来不同的值有不同的价值观。
对于上面的示例,它应该只返回3,100,5, 2012-10-18 17:10:05
有任何建议要克服这个问题吗?
答案 0 :(得分:3)
;WITH CTE as(
select *,ROW_NUMBER() over (partition by PropertyId,UserId order by AccesedOn desc) as rn
from table1)
select * from CTE where rn=1
答案 1 :(得分:1)
你需要一个副选择,而不是你需要一个不同的选择。
select *
from Table A
where AccessedOn in
(Select max(AccessedOn) from table B where A.UserId = B.UserId)
答案 2 :(得分:1)
您可以使用DISTINCT
而不是使用MAX()
,而是按其余列分组
Select Id, PropertyId, UserId, MAX(AccesedOn)
From Table t
group by Id, PropertyId, UserId
这应该可以为您提供所需的结果。