Sql 在按用户ID分组的不同对上查找DATEDIFF之和?

Sql 在按用户ID分组的不同对上查找DATEDIFF之和?,sql,sql-server,aggregate-functions,Sql,Sql Server,Aggregate Functions,我有一个命令,看起来像这样: SELECT UserID, FacilityMMXID, ScheduleDate, StartTime, EndTime FROM TblPASchedule WHERE UserID = 244 AND MONTH(ScheduleDate) = 03 AND Year(ScheduleDate) = 2017 输出如下所示 UserID FacilityMMXID ScheduleDate StartTime EndTime --

我有一个命令,看起来像这样:

SELECT
UserID,
FacilityMMXID,
ScheduleDate,
StartTime,
EndTime
FROM TblPASchedule 
WHERE UserID = 244 AND MONTH(ScheduleDate) = 03 AND Year(ScheduleDate) = 2017
输出如下所示

UserID      FacilityMMXID ScheduleDate StartTime        EndTime
----------- ------------- ------------ ---------------- ----------------
244         1             2017-03-17   01:00:00         05:00:00
244         2             2017-03-17   01:00:00         05:00:00
244         3             2017-03-17   01:00:00         05:00:00
244         4             2017-03-17   01:00:00         05:00:00
244         5             2017-03-17   01:00:00         05:00:00
244         6             2017-03-17   01:00:00         05:00:00
244         7             2017-03-17   01:00:00         05:00:00
244         8             2017-03-17   01:00:00         05:00:00
244         9             2017-03-17   01:00:00         05:00:00
244         10            2017-03-17   01:00:00         05:00:00
244         11            2017-03-17   01:00:00         05:00:00
244         12            2017-03-17   01:00:00         05:00:00
244         13            2017-03-17   01:00:00         05:00:00
244         14            2017-03-17   01:00:00         05:00:00
244         15            2017-03-17   01:00:00         05:00:00
244         1             2017-03-17   05:00:00         22:00:00
244         2             2017-03-17   05:00:00         22:00:00
244         3             2017-03-17   05:00:00         22:00:00
244         4             2017-03-17   05:00:00         22:00:00
244         5             2017-03-17   05:00:00         22:00:00
244         6             2017-03-17   05:00:00         22:00:00
244         7             2017-03-17   05:00:00         22:00:00
244         8             2017-03-17   05:00:00         22:00:00
244         9             2017-03-17   05:00:00         22:00:00
244         10            2017-03-17   05:00:00         22:00:00
244         11            2017-03-17   05:00:00         22:00:00
244         12            2017-03-17   05:00:00         22:00:00
244         13            2017-03-17   05:00:00         22:00:00
244         14            2017-03-17   05:00:00         22:00:00
244         15            2017-03-17   05:00:00         22:00:00
Hours Worked    UserID
1.666666        19
1.233333        37
0.500000        38
我遗漏了ID行,因为它在本例中并不重要。 另外-是的-我意识到这个表是非常冗余的-它不是我目前可以修复的东西,因为我不被允许-我只能让前面提到的求和函数工作

最终目标是将不同的开始时间和结束时间对配对,然后找出它们之间的日期差异——然后,在整个月内——找到所有条目的总和

就我所知:

使用:

SELECT
UserID,
DATEDIFF(HOUR, StartTime, EndTime) AS 'Hours Worked'
FROM TblPASchedule WHERE UserID = 244 AND MONTH(ScheduleDate) = 03 AND Year(ScheduleDate) = 2017
GROUP BY UserId, StartTime, EndTime
我得到的输出是:

UserID      Hours Worked
----------- ------------
244         4
244         17
但我不太确定我应该从这里走到哪里


我最终需要让它根据用户ID对这些总和进行分组,但我想是一步一步。我现在正在使用where子句处理单个id…

您是否尝试过在组的顶部包装其他子查询

SELECT UserId, SUM('Hours Worked') as 'Hours Worked' FROM (
  SELECT
   UserID,
   DATEDIFF(HOUR, StartTime, EndTime) AS 'Hours Worked'
   FROM TblPASchedule WHERE UserID = 244 AND MONTH(ScheduleDate) = 03 AND Year(ScheduleDate) = 2017
   GROUP BY UserId, StartTime, EndTime
) AS temp
GROUP BY UserId

此查询获取所有不同的UserID、Starttime和Endtime集

;WITH CTE AS
 (SELECT DISTINCT UserID, StartTime, EndTime  FROM [dbo].[TblPASchedule])

SELECT SUM(DATEDIFF(MINUTE, StartTime, EndTime))/60.0 AS 'Hours Worked', UserID
FROM CTE GROUP BY UserID
结果是这样的

UserID      FacilityMMXID ScheduleDate StartTime        EndTime
----------- ------------- ------------ ---------------- ----------------
244         1             2017-03-17   01:00:00         05:00:00
244         2             2017-03-17   01:00:00         05:00:00
244         3             2017-03-17   01:00:00         05:00:00
244         4             2017-03-17   01:00:00         05:00:00
244         5             2017-03-17   01:00:00         05:00:00
244         6             2017-03-17   01:00:00         05:00:00
244         7             2017-03-17   01:00:00         05:00:00
244         8             2017-03-17   01:00:00         05:00:00
244         9             2017-03-17   01:00:00         05:00:00
244         10            2017-03-17   01:00:00         05:00:00
244         11            2017-03-17   01:00:00         05:00:00
244         12            2017-03-17   01:00:00         05:00:00
244         13            2017-03-17   01:00:00         05:00:00
244         14            2017-03-17   01:00:00         05:00:00
244         15            2017-03-17   01:00:00         05:00:00
244         1             2017-03-17   05:00:00         22:00:00
244         2             2017-03-17   05:00:00         22:00:00
244         3             2017-03-17   05:00:00         22:00:00
244         4             2017-03-17   05:00:00         22:00:00
244         5             2017-03-17   05:00:00         22:00:00
244         6             2017-03-17   05:00:00         22:00:00
244         7             2017-03-17   05:00:00         22:00:00
244         8             2017-03-17   05:00:00         22:00:00
244         9             2017-03-17   05:00:00         22:00:00
244         10            2017-03-17   05:00:00         22:00:00
244         11            2017-03-17   05:00:00         22:00:00
244         12            2017-03-17   05:00:00         22:00:00
244         13            2017-03-17   05:00:00         22:00:00
244         14            2017-03-17   05:00:00         22:00:00
244         15            2017-03-17   05:00:00         22:00:00
Hours Worked    UserID
1.666666        19
1.233333        37
0.500000        38

这管用!非常感谢。我想把整个事情说成一句话,但这也很好。我相信也没有性能差异。