TSQL - Расчет даты в запросе и установка значения? - PullRequest
0 голосов
/ 11 января 2012

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

Начальная дата - это отметка времени последнего вхождения того места, где существует конкретный идентификатор (если фильтр имеет значение true), получить время из этой записи отметки времени и выполнить 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 ]

3 голосов
/ 11 января 2012

Полагаю, вы хотите что-то подобное.

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 голос
/ 11 января 2012

Вы можете заменить оператор SELECT следующим:

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

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

...