如何在SQL Server中获取每小时平均值并将不存在的小时数设为0?

时间:2019-02-27 13:55:56

标签: sql-server group-by

在我的x表中,基本上有两列。第一列显示某物的一些整数值。第二列显示时间戳记,该时间戳记指定何时将这些值添加到表中(格式示例:2019-02-27 09:35:42.107)。我想获取每小时所有值的总和。我基本上可以通过以下查询获得每小时平均值:

SELECT
  SUM(value),
  CONCAT(day, ' ', hour, ':', DATEPART(MINUTE, SYSDATETIME()))
FROM (SELECT
  DATEPART(MINUTE, TIMESTAMP) minute,
  AVG(VALUE) value,
  DATEPART(HOUR, TIMESTAMP) hour,
  DATEPART(DAY, TIMESTAMP) day
FROM x
WHERE TIMESTAMP > DATEADD(DAY, -1, SYSDATETIME())
AND SERIESID = 24
GROUP BY DATEPART(HOUR, TIMESTAMP),
         DATEPART(MINUTE, TIMESTAMP),
         DATEPART(DAY, TIMESTAMP)) tb
GROUP BY hour,
         day

在上面的查询中,我得到了过去24小时的每小时平均值(不是从每小时的开始,如02:00到03:00。它从当前分钟开始,例如16:55-17:55。这实际上是我想要的,这里没有问题。)

我的问题是,当我在一个特定的小时没有任何记录时,我看不到该小时的值为0,这是我不希望看到的。因此,如何在丢失的小时数中获得0值。

我还尝试获取每4小时的平均值,同样是从当前分钟开始,而不是从每小时开始。但是我也想不出如何获得4小时平均值。我该如何解决这两个问题?


标记为我的重复的问题不包括我两个问题的答案。有人知道答案吗?最好的问候,

0 个答案:

没有答案