Sql 在开始和结束时间之间对记录进行分组

Sql 在开始和结束时间之间对记录进行分组,sql,datetime,sql-server-2008-r2,group-by,Sql,Datetime,Sql Server 2008 R2,Group By,我有一个测试数据库,每个测试都有一个StartTime和(对于那些完成的)EndTime值。 我想创建一个查询,显示每小时运行的测试数量 i、 e.在任何给定时间有开始时间但没有结束时间的测试 我解决了分组问题-多亏了从到的问题您可以通过条件聚合实现这一点: SELECT CAST(StartDate as date) AS ForDate, DATEPART(hour, StartDate) AS OnHour, COUNT(*) AS TotalStarts,

我有一个测试数据库,每个测试都有一个StartTime和(对于那些完成的)EndTime值。 我想创建一个查询,显示每小时运行的测试数量

i、 e.在任何给定时间有开始时间但没有结束时间的测试


我解决了分组问题-多亏了从到的问题

您可以通过条件聚合实现这一点:

SELECT CAST(StartDate as date) AS ForDate,
       DATEPART(hour, StartDate) AS OnHour,
       COUNT(*) AS TotalStarts,
       SUM(CASE WHEN CAST(StartDate as date) <> CAST(EndDate as date) or
                     DATEPART(hour, StartDate) <> DATEPART(hour, EndDate)
                THEN 1
                ELSE 0
           END) as StartedButNotEndedInHour
FROM #Events
GROUP BY CAST(StartDate as date),
       DATEPART(hour,StartDate)
选择CAST(起始日期为日期)作为ForDate,
日期部分(小时,开始日期)为OnHour,
将(*)计数为TotalStart,
金额(以开始日期为准)或
日期部分(小时,开始日期)日期部分(小时,结束日期)
那么1
其他0
结束)按开始但不按小时计算
来自#事件
按演员分组(起始日期为日期),
日期部分(小时,开始日期)