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