让我先介绍一下,我并不完全确定如何首先提出这个问题,这一直是试图找到答案的一大障碍。因此,我可能会使用完全错误的术语。使用TSQL进行滚动计数
我想在一段时间内使用一个窗口来计算不同用户的数量。
我的数据表包含以下列:Id,User,RequestedOn,Query由系统随时间捕获请求的位置。例如,在八个小时的过程中,系统由78个不同的用户查询370次不同的时间。我想通过蛮力并忽略它(BF & I),但我像许多BF &一样接近,它不能缩放值得的bean。
在这些例子中,计数的窗口大小是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'
我觉得有一个更好的方法做到这一点,但我不知道哪里可以开始寻找。
指针将是太棒了!
你能提供一些示例数据和预期输出:
如果你想重写查询,您可以通过做这样的事情开始? – tarheel