2012-01-10 4 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

답변

3

나는 이런 식으로하고 싶어.

DECLARE @LastEventTimespan INT 

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

이것은 주어진 사용자 및 현재 DateTime의 PageVisitEventID 최고 값 DateAdded 초 사이의 차이를 계산한다. 의 데이터 유형을 INT으로 변경 했으므로 초 단위로 처리하는 것이 더 적절합니다.

1

당신이 하나를 사용하여 SELECT 문을 대체 할 수있다 : 나는 이러한 쿼리를 여러 번 수행 결코 문제를 했어

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

.

+2

@gbn : 맞습니다. Id 필드의 검색을 제거합니다. 정보 주셔서 감사합니다. – GolfWolf