按查询分区和分组

Partition and group by query

我有 table 包含以下列: 1.ClockifyId, 2.每个任务的StartTime EndTime 3.日期。 4.持续时间

图片附在下方 我的目标是编写查询来计算每个日期的每个用户(即 ClockifyId)的总持续时间。 由于一个用户可以在一天内完成多个任务,我想总结所有这些任务的持续时间。简而言之, 我想要每个日期的每个用户(即 clockifyid)的总任务持续时间。
enter image description here

这里缺少一些细节,但这应该让你足够接近。

您需要做的第一件事是将 StartTime 和 EndTime 转换为日期时间字段(如果尚未转换)。对它们执行 DATEDIFF 可以让您找出每条记录的分钟数差异。您可以根据需要更改度量单位。

完成后,您将使用 SUM(),它是一个聚合函数。这使得有必要使用 GROUP BY。然后,您按哪些字段分组,在本例中为 ClockifyId 和 StartTime 作为日期。您必须将其作为没有日期时间的日期来执行,否则您将在一天内为单个 Clockify 记录返回多行。

SELECT 
      ClockifyId
    , SUM(DATEDIFF(mi, CAST(StartTime AS datetime), CAST(EndTime AS datetime))) AS DurationInMinutes
    , CAST(StartTime AS date)
FROM TableName
GROUP BY
      ClockifyId
    , CAST(StartTime AS date)

值得注意的是,这假定始终存在有效的 StartTime 和 EndTime。如果这些字段有空值,这将引发一些错误。