【发布时间】:2017-05-30 03:04:14
【问题描述】:
首先让我先说一下我不完全确定如何首先提出这个问题,这一直是试图找到答案的一大障碍。因此,我可能使用了完全错误的术语。
我想在一段时间内使用窗口获取不同用户的计数。
我的数据表有以下几列:Id、User、RequestedOn、Query,其中请求被系统随时间捕获。例如,在 8 小时的过程中,78 位不同的用户向系统查询了 370 次不同的时间。
我想出了如何通过蛮力和忽略 (BF&I) 来做到这一点,但与许多 BF&I 方法一样,它无法扩展有价值的豆子。
在这些示例中,计数的窗口大小为 8 小时;给定 8 小时时段内不同用户的数量。
Select '5/28/17 15:00' [StartingFrom], Count(Distinct [UserName]) [Users] From [vwRequests] Where [RequestedOn] >= '5/28/17 15:00' And [RequestedOn] <= '5/28/17 23:00' Union
Select '5/28/17 14:00' [StartingFrom], Count(Distinct [UserName]) [Users] From [vwRequests] Where [RequestedOn] >= '5/28/17 14:00' And [RequestedOn] <= '5/28/17 22:00' Union
Select '5/28/17 13:00' [StartingFrom], Count(Distinct [UserName]) [Users] From [vwRequests] Where [RequestedOn] >= '5/28/17 13:00' And [RequestedOn] <= '5/28/17 21:00' Union
Select '5/28/17 12:00' [StartingFrom], Count(Distinct [UserName]) [Users] From [vwRequests] Where [RequestedOn] >= '5/28/17 12:00' And [RequestedOn] <= '5/28/17 20:00' Union
Select '5/28/17 11:00' [StartingFrom], Count(Distinct [UserName]) [Users] From [vwRequests] Where [RequestedOn] >= '5/28/17 11:00' And [RequestedOn] <= '5/28/17 19:00' Union
Select '5/28/17 10:00' [StartingFrom], Count(Distinct [UserName]) [Users] From [vwRequests] Where [RequestedOn] >= '5/28/17 10:00' And [RequestedOn] <= '5/28/17 18:00' Union
Select '5/28/17 09:00' [StartingFrom], Count(Distinct [UserName]) [Users] From [vwRequests] Where [RequestedOn] >= '5/28/17 09:00' And [RequestedOn] <= '5/28/17 17:00' Union
Select '5/28/17 08:00' [StartingFrom], Count(Distinct [UserName]) [Users] From [vwRequests] Where [RequestedOn] >= '5/28/17 08:00' And [RequestedOn] <= '5/28/17 16:00'
我认为必须有更好的方法来做到这一点,但我什至不知道从哪里开始寻找。
指针会很棒!
【问题讨论】:
-
你能提供一些示例数据和预期的输出吗?
标签: sql-server tsql sql-server-2012