2012-01-10 1 views
0

Используя SQL Server 2008, я хочу рассчитать промежуток времени в секундах, который произошел между двумя временами.TSQL - Вычисление датированного в запросе и установка значения?

Дата начала - это временная отметка последнего события, в котором существует конкретный идентификатор (если фильтр является истинным), получить время от этой записи метки времени и выполнить 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 идентификатор фильтра и процесса соответственно, но я не в состоянии установить @LastEventTimespan, однако не пытается присвоить значение при выполнении данных-поиска документов нет-нет.

Как я могу обойти это?

Спасибо.

+2

Вопрос в том, что я ошибаюсь. Извините. Что вы планируете делать с @LastEventTimespan? Учитывая, что у вас будет несколько строк из-за GROUP BY, это также бессмысленно, потому что это может быть любая из строк, а также не разрешена. Однако вам понадобится GROUP BY, если вы хотите, чтобы он вычислял его в строке. И вы не GROUP BY в своей MAXed колонке так или иначе, так что это ухудшает ситуацию – gbn

ответ

3

Я думаю, вы хотите что-то вроде этого.

DECLARE @LastEventTimespan INT 

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

Это позволит вычислить разность в секундах между DateAdded для самого высокого значения PageVisitEventID для данного пользователя и текущего DateTime. Я изменил тип данных @LastEventTimespan на INT, потому что, вероятно, имеет смысл иметь дело с секундами.

1

Вы можете заменить ЗЕЬЕСТ с этим:

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

Я не сделал таких запросов много раз и никогда не было проблем.

+2

@gbn: вы правы, я удаляю извлечение поля Id. Спасибо за информацию. – GolfWolf

 Смежные вопросы

  • Нет связанных вопросов^_^