计算时间间隔内的值

时间:2017-11-06 09:09:46

标签: tsql sql-server-2016

请有人协助SQL视图。

我有一个名为LoginActivity的表

CREATE TABLE [dbo].[LoginActivity](
[LoAc_ActivityID] [int] IDENTITY(1,1) NOT NULL,
[LoAc_UserID] [int] NULL,
[LoAc_Login] [datetime] NULL,
[LoAc_logout] [datetime] NULL,
[LoAc_Duration] [numeric](24, 6) NULL,
)

使用用户ID记录登录/注销时间并返回如下数据。

779     1   2017-11-03 08:07:41.000  2017-11-03 08:09:14.000    1.000000
780     1   2017-11-04 08:09:19.000  2017-11-04 08:27:19.000    17.000000
781     2   2017-11-04 08:27:22.000  2017-11-04 08:35:11.000    7.000000
782     3   2017-11-04 08:35:18.000  2017-11-04 08:58:12.000    19.000000
783     4   2017-11-04 08:35:22.000  2017-11-04 08:58:12.000    19.000000

我需要创建一个视图来计算LoAc_Login在过去1小时,2小时,3小时和最后4小时内的用户数。我想提供如下数据。

 WithinHour  1HourAgo 2HoursAgo 3HoursAgo 4HoursAgo
 2           3        5         0         2

感谢。

1 个答案:

答案 0 :(得分:0)

喜欢的东西;

SELECT 
    sum(CASE WHEN DATEDIFF(H,getdate(),LoAc_Login) >= 0 AND DATEDIFF(H,getdate(),LoAc_Login) < 1 THEN 1 ELSE 0 END AS WithinHour,
    sum(CASE WHEN DATEDIFF(H,getdate(),LoAc_Login) >= 1 AND DATEDIFF(H,getdate(),LoAc_Login) < 2 THEN 1 ELSE 0 END AS OneHourAgo,
    etc. 
FROM LoginActivity

未经测试,语法可能会因快速输入而关闭,但希望您明白这一点?