使用内部联接表时,如何在TSQL中选择LASTDATE()?
因此,这里是这样的:我有一个表,它返回用户ID的时间跨度。不幸的是,它为一些用户返回重复的时间跨度(即,一些用户在结果中出现多次,因为他们在查询中有重复的记录) 我只想从用户结果中为结果集中的每个用户选择最近的时间跨度。我尝试构建一个按()排序的查询,但这并没有被证明是有效的。我认为我在这方面是正确的,但也许不是 无论如何,下面是我试图筛选出的输出的示例摘要:使用内部联接表时,如何在TSQL中选择LASTDATE()?,sql,tsql,Sql,Tsql,因此,这里是这样的:我有一个表,它返回用户ID的时间跨度。不幸的是,它为一些用户返回重复的时间跨度(即,一些用户在结果中出现多次,因为他们在查询中有重复的记录) 我只想从用户结果中为结果集中的每个用户选择最近的时间跨度。我尝试构建一个按()排序的查询,但这并没有被证明是有效的。我认为我在这方面是正确的,但也许不是 无论如何,下面是我试图筛选出的输出的示例摘要: User Activity 1 Activity1 ID Activity 2
User Activity 1 Activity1 ID Activity 2 Activity2 ID
User 1 01-01-2009 - 12-31-2010 100.00 03-02-2009 - 05-05-2009 500.01
User 1 01-06-2009 - 12-31-2010 100.01 03-02-2009 - 05-05-2009 500.01
User 2 06-01-2009 - 12-31-2010 200.00 06-06-2010 - 03-03-2011 501.01
我想做的是只返回第一个“User 1”类别(或者更具体地说,是时间跨度最长的元组)。我使用的是MS SQL Server(TSQL),它还不支持时态数据结构,但应该在2012年使用
集体有什么想法吗?我相信您正在寻找“划分”您的查询。 这些措施应有助于:
如果要按时间跨度排序,请尝试从开始日期减去结束日期。 例如:
declare @Start DateTime, @End DateTime
set @Start = '20100131'
set @End = '20100502'
select @Start, @End
select cast(@End - @Start as int)
这将返回数字92我用你的
select top 1
...
order by cast(@End - @Start as int) desc
它应该可以正常工作。正如Telarian所写,使用分区也会有所帮助。我认为这确实是我想要的。看起来总指挥部会做我需要做的事情。请改进你问题的措辞,想弄清楚你到底想做什么有点困难。我可以修改措辞,但Telerian似乎对上下文理解得很好。有点混乱,但关键是,您希望根据组内的某种排序,找到每个组的前1条记录。在以前的SQLServer版本中,这是相当困难的,但现在相对容易了。