如何根据统计信息显示用户上次活动的时间?

时间:2014-04-08 14:16:59

标签: sql tsql

我有一个数据库,用于在登录系统时存储getdate()的日期时间。

我想做一个选择,显示那些在过去10分钟内一直处于活动状态的选项,因为现在有效#39;而对于所有其他人来说,比如多久以前它们是活跃的,例如3天或3小时。

我不知道如何做第二部分。

这是我为获得活跃用户所做的工作:

SELECT DISTINCT FirstName, LastName, 'Active now'
FROM dbo.Users UP
INNER JOIN Portal.dbo.UserStatistics US
ON US.UserID = UP.UserID
INNER JOIN Portal.dbo.Pages
ON pages.id = US.PageID
WHERE US.DateTimeLastUpdated >= dateadd(minute, -5, getdate())

3 个答案:

答案 0 :(得分:0)

SELECT DISTINCT FirstName, LastName, 
CASE when US.DateTimeLastUpdated >= dateadd(minute, -5, getdate()) then 'Active now' else cast(datediff(h,getdate(), US.DateTimeLastUpdated) as varchar) end
FROM dbo.Users UP
INNER JOIN Portal.dbo.UserStatistics US
ON US.UserID = UP.UserID
INNER JOIN Portal.dbo.Pages
ON pages.id = US.PageID

答案 1 :(得分:0)

您可以将case语句与group by子句一起使用:

SELECT 
   FirstName, 
   LastName, 
   case when max(US.DateTimeLastUpdated) >= dateadd(minute, -5, getdate()) then
          'Active now'
        when max(US.DateTimeLastUpdated) >= dateadd(day, -2, getdate()) then
          'Active 3 days'
   ...
   end as [last viewed]
FROM 
   dbo.Users UP
INNER JOIN 
   Portal.dbo.UserStatistics US
                ON US.UserID = UP.UserID
INNER JOIN 
   Portal.dbo.Pages
                ON pages.id = US.PageID
GROUP BY 
   FirstName, 
   LastName

答案 2 :(得分:0)

你需要聚合以获得每个用户的最新访问权限,然后使用它,所以有点像:

SELECT      up.FirstName, 
            up.LastName, 
            CASE 
                WHEN MAX(US.DateTimeLastUpdated) >= dateadd(minute, -5, getdate()) THEN 'Now'
                ELSE CAST(MAX(DATEDIFF(H, US.DateTimeLastUpdated, GETDATE())) AS VARCHAR) + ' hours ago' 
            AS LastActive

FROM        dbo.Users UP

INNER JOIN  Portal.dbo.UserStatistics US
    ON      US.UserID = UP.UserID

INNER JOIN  Portal.dbo.Pages
    ON      pages.id = US.PageID

GROUP BY    up.FirstName, 
            up.LastName