Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中获取在给定时间段内重叠的记录计数?_Sql - Fatal编程技术网

如何在SQL中获取在给定时间段内重叠的记录计数?

如何在SQL中获取在给定时间段内重叠的记录计数?,sql,Sql,我有很多用户(十万),我想计算他们所连接和交互的服务器的峰值使用率 我维护一个表一个非常简单的表,其中包含UserID,BeginDT,会话开始时的日期时间,以及会话结束时的日期时间 我想知道每天每小时有多少用户被连接。我可能一天中也要一分钟 我无法在该表中添加新字段来计算在给定时间连接的用户数,因为我无法控制填充该表的应用程序 我需要生成一个数据集,其中包含所选时段内一天中给定时间连接的用户数量,以绘制图表。您可以查询数据库,并选择开始时间>=您的开始时间,EndDT=“starttime”和

我有很多用户(十万),我想计算他们所连接和交互的服务器的峰值使用率

我维护一个表一个非常简单的表,其中包含UserIDBeginDT,会话开始时的日期时间,以及会话结束时的日期时间

我想知道每天每小时有多少用户被连接。我可能一天中也要一分钟

我无法在该表中添加新字段来计算在给定时间连接的用户数,因为我无法控制填充该表的应用程序


我需要生成一个数据集,其中包含所选时段内一天中给定时间连接的用户数量,以绘制图表。

您可以查询数据库,并选择开始时间>=您的开始时间,EndDT=“starttime”和EndDT我不完全确定您要查找的是什么。下面将按小时为您提供计数明细,但不区分不同的日期。这使用了,请查看链接,如果您需要有关这方面的信息。现在,如果用户在10:59登录,他们仍将在10:00小时内计数

CREATE TABLE #LogTimes
(
    userId int,
    starttime DATETIME,
    endtime DATETIME
)

 SELECT TOP 24
        IDENTITY(INT,1,1) AS N
   INTO dbo.Tally
   FROM Master.dbo.SysColumns sc1

INSERT INTO #LogTimes
SELECT 1, GETDATE(), DATEADD(HH, 3, GETDATE()) UNION ALL
SELECT 2, DATEADD(DD, 1, GETDATE()), GETDATE() UNION ALL
SELECT 3, GETDATE(), DATEADD(HH, 5, GETDATE()) UNION ALL
SELECT 4, GETDATE(), DATEADD(HH, 7, GETDATE()) UNION ALL
SELECT 5, GETDATE(), DATEADD(HH, 9, GETDATE())

SELECT N, COUNT(*) FROM #LogTimes LT
    JOIN Tally T ON DATEPART(Hour, startTime) <= T.N AND DATEPART(hour, endtime) >= T.N
    GROUP BY N
    ORDER BY N ASC  

此外,如果用户跨越天,这将无法正常工作。需要添加此逻辑。

如果您有可用的LINQ,则可以:

var start = new DateTime(2008, 1, 1);
var end = new DateTime(2008, 1, 2);
var q1 = TblSessions.Where (s => s.BeginDT >= start && s.EndDT <= end).ToList();
var q2 = from r in Enumerable.Range(0, (int)(end - start).TotalHours).Select (e => start.AddHours(e))           
         select new 
         {
            Time = r,
            Count = q1.Count (x => r >= x.BeginDT && r <= x.EndDT)
         };
var start=newdatetime(2008,1,1);
var end=新的日期时间(2008,1,2);
var q1=TblSessions.Where(s=>s.BeginDT>=start&s.EndDT start.AddHours(e))
选择新的
{
时间=r,

Count=q1.Count(x=>r>=x.BeginDT&&r您使用的是什么数据库?一个可行的解决方案可能涉及方便的日期/时间和间隔操作以及序列生成,这两种操作在不同的数据库中都有所不同。SQL Server、Oracle和MySQL都涉及其中。我没有找到任何方法在一个查询中完成此操作…我也无法使用任何函数
var start = new DateTime(2008, 1, 1);
var end = new DateTime(2008, 1, 2);
var q1 = TblSessions.Where (s => s.BeginDT >= start && s.EndDT <= end).ToList();
var q2 = from r in Enumerable.Range(0, (int)(end - start).TotalHours).Select (e => start.AddHours(e))           
         select new 
         {
            Time = r,
            Count = q1.Count (x => r >= x.BeginDT && r <= x.EndDT)
         };