2012-01-10 55 views
0

使用SQL Server 2008,我想计算两次之间发生的时间跨度,以秒为单位。TSQL - 在查询中计算datediff并设置一个值?

开始日期是特定ID存在的最后一次发生的时间戳(如果过滤器为真),从该时间戳记录获取时间,并针对当前处理时间并返回一个DATEDIFF()一个值,@LastEventTimespan,以秒为单位。

DECLARE @CurrentProcessTime DATETIME 
DECLARE @LastEventTimespan DATETIME 
SET @CurrentProcessTime = GetDate() 

-- find the timespan since the last session event 
-- DATEDIFF (datepart , startdate , enddate) 

SELECT MAX(PageVisitEventID) AS LastPageVisitEventID, @LastEventTimespan = DATEDIFF(second , DateAdded , @CurrentProcessTime) 
FROM PageVisitEvents 
WHERE UserID = @UserID 
GROUP BY LastPageVisitEventID 

我想我可以得到相应的过滤器和过程的MAX ID,但我无法设置@LastEventTimespan,但是试图分配一个值做数据检索时是一个没有没有。

我怎样才能解决这个问题?

谢谢。

+2

问题是错的,我很抱歉。你打算如何处理@LastEventTimespan?由于GROUP BY会有多行,所以它也没有意义,因为它可以是任何行,也可以是不允许的。但是,如果您想要每行计算一次,则需要使用GROUP BY。而且你也不会在你的MAXed列上使用GROUP BY,所以这会让事情变得更糟 – gbn 2012-01-10 20:33:09

回答

3

我想你想要这样的东西。

DECLARE @LastEventTimespan INT 

SELECT TOP 1 @LastEventTimespan = DATEDIFF(SECOND, DateAdded, GETDATE()) 
FROM PageVisitEvents 
WHERE UserID = @UserID 
ORDER BY PageVisitEventID DESC 

这将计算PageVisitEventID对于给定用户和当前日期时间的最高值之​​间DateAdded以秒的差异。我将@LastEventTimespan的数据类型更改为INT,因为处理秒数可能更有意义。

1

你可以用这个代替SELECT语句:

SELECT TOP 1 
    @LastEventTimespan = DATEDIFF(second , DateAdded , @CurrentProcessTime) 
FROM PageVisitEvents 
WHERE UserID = @UserID 
ORDER BY PageVisitEventID desc 

我已经做了这样的质疑很多次,从来没有出现过问题。

+2

@gbn:你是对的,我删除了Id字段的检索。谢谢(你的)信息。 – GolfWolf 2012-01-10 20:49:09