C# 忽略一个字段选择不同的值

C# 忽略一个字段选择不同的值,c#,.net,sql,sql-server,sql-server-2008,C#,.net,Sql,Sql Server,Sql Server 2008,我有一张类似的桌子 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 我在这里尝试的是为特定用户选择不同的属性,但按最近的访问时间排序 此外,我还将此表与其他三个表合并,从而提供重复的

我有一张类似的桌子

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列具有不同的值

对于上面的示例,它应该只返回
3100,52012-10-1817:10:05


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

很可能您需要一个子选择,而不是一个独特的选择

select * 
from Table A
where AccessedOn in
  (Select max(AccessedOn) from table B where A.UserId = B.UserId)

为此,您更可能需要一个subselect,而不是一个distinct

select * 
from Table A
where AccessedOn in
  (Select max(AccessedOn) from table B where A.UserId = B.UserId)

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

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

这将为您提供所需的结果。

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

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

这将为您提供所需的结果。

这将导致只选择一条记录我认为它将为每个UsedId提供一条记录,在本例中只有一个UserID,因此在本例中结果是一条记录。这不是问题吗?你在更大的表上试过了吗?这将导致只选择一条记录我认为它会为每个UsedId提供一条记录,在这个例子中只有一个UserID,所以在这个例子中结果是一条记录。这不是问题吗?你在更大的表上试过了吗?这似乎是SQL Server奇怪的实现方式,是的。这似乎是SQL Server奇怪的实现方式,是的。你的查询没有给出huMpty duMpty想要的结果。使用
Id
字段分组将返回所有行。SQLFiddle here:抱歉,我忽略了这一点,应该从select和group by中删除Id列。这样你就不会返回OP要求的结果,他希望结果中有
Id
字段,例如:
3100,52012-10-18 17:10:05
你的查询没有给出huMpty duMpty所要的结果。使用
Id
字段分组将返回所有行。SQLFiddle here:抱歉,我忽略了这一点,应该从select和group by中删除Id列。这样您就不会返回OP要求的结果,他希望结果中有
Id
字段,例如:
3100,52012-10-18 17:10:05