0

我有一张类似的桌子

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

有什么建议可以克服这个问题吗?

4

3 回答 3

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
于 2012-10-16T15:59:17.987 回答
1

您更有可能需要一个子选择,而不是为此需要一个独特的。

select * 
from Table A
where AccessedOn in
  (Select max(AccessedOn) from table B where A.UserId = B.UserId)
于 2012-10-16T15:58:20.220 回答
1

而不是 using DISTINCT,您可以使用MAX()并按其余列分组

Select Id, PropertyId, UserId, MAX(AccesedOn)
From Table t
group by Id, PropertyId, UserId

这应该会给你你正在寻找的结果。

于 2012-10-16T16:05:28.363 回答