Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用内部联接表时,如何在TSQL中选择LASTDATE()?_Sql_Tsql - Fatal编程技术网

使用内部联接表时,如何在TSQL中选择LASTDATE()?

使用内部联接表时,如何在TSQL中选择LASTDATE()?,sql,tsql,Sql,Tsql,因此,这里是这样的:我有一个表,它返回用户ID的时间跨度。不幸的是,它为一些用户返回重复的时间跨度(即,一些用户在结果中出现多次,因为他们在查询中有重复的记录) 我只想从用户结果中为结果集中的每个用户选择最近的时间跨度。我尝试构建一个按()排序的查询,但这并没有被证明是有效的。我认为我在这方面是正确的,但也许不是 无论如何,下面是我试图筛选出的输出的示例摘要: User Activity 1 Activity1 ID Activity 2

因此,这里是这样的:我有一个表,它返回用户ID的时间跨度。不幸的是,它为一些用户返回重复的时间跨度(即,一些用户在结果中出现多次,因为他们在查询中有重复的记录)

我只想从用户结果中为结果集中的每个用户选择最近的时间跨度。我尝试构建一个按()排序的查询,但这并没有被证明是有效的。我认为我在这方面是正确的,但也许不是

无论如何,下面是我试图筛选出的输出的示例摘要:

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版本中,这是相当困难的,但现在相对容易了。