【问题标题】:Microsoft SQL Server - Joining based on Start DateTime and EndDateTime with a Cumulative SumMicrosoft SQL Server - 基于 Start DateTime 和 EndDateTime 的累积和连接
【发布时间】:2023-04-07 09:07:01
【问题描述】:

我希望确定在任何给定时间登录到服务器的用户数量。我有开始日期时间和结束日期时间的用户级别数据。

表 1

user_ID          start_time           end_time
----------------------------------------------------------
1XbC34          03/06/2016 00:00:06   03/06/2016 00:23:26
2re56           03/06/2016 00:01:07   03/06/2016 00:32:40
sdf4ser1w       03/06/2016 00:02:10   03/06/2016 00:02:37
sf54fw3fa       03/06/2016 00:02:11   03/06/2016 00:25:42
fa31f1asf1      03/06/2016 00:04:17   03/06/2016 00:05:43
gvf5af13a       03/06/2016 00:04:18   03/06/2016 00:05:30
f2s14fs3afd1a   03/06/2016 00:04:33   03/06/2016 00:05:07
sdf1a3f1d3sa    03/06/2016 00:04:34   03/06/2016 00:23:02

我正在寻找的输出是

DateTime              Logged in accumulative (between Start and end)  
--------------------------------------------
03/06/2016 00:00:06,  1
03/06/2016 00:01:07,  2
03/06/2016 00:02:10,  3
03/06/2016 00:02:11,  4
03/06/2016 00:04:17,  4

等等……

我最初的想法是创建一个临时表,该表将包含所有日期/时间以加入表 1,如下所示。

select dt.Start_time
into #cal
from table1 dt
where dt.start_time between '2016-06-03 00:00:00' AND '2016-06-03 23:59:59'
group by dt.start_time

接下来是创建连接。

Select dt.Start_Time, count(*)
from table1 dt
left Join #cal C on C.start_time between dt.start_time AND dt.end_time 
where dt.start_time between '2016-06-03 00:00:00' AND '2016-06-03 23:59:59'
group by dt.start_time

非常感谢任何帮助。

谢谢,

标记

【问题讨论】:

  • 假设“Microsoft SQL”实际上是指“Microsoft SQL Server”并为此添加了相关标签(它可以意味着 Microsoft Access 中的 SQL - 但这似乎不太可能)。请始终为您实际使用的 RDBMS 提供相关且有用的标签 - sql 只是查询语言,被许多数据库使用,因此并不是很有帮助...

标签: sql-server datetime join between cumulative-sum


【解决方案1】:

您可以通过创建一个派生表来做到这一点,该表在不同的行上包含开始时间和结束时间以及指示开始或结束的标志。然后该标志的累积总和为您提供所需的信息。

在 SQL Server 2012+ 中,如下所示:

select t1.t, sum(inc) over (order by t) as num_users
from ((select start_time as t, 1 as inc from table1) union all
      (select end_time, -1 as inc from table1)
     ) t1;

【讨论】:

    猜你喜欢
    • 2014-05-11
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多