【问题标题】:SQL - Averaging each second rowSQL - 平均每第二行
【发布时间】:2018-04-17 07:51:33
【问题描述】:

我有两个包含半小时数据的表格,我想取两个半小时的平均值来查看每小时的平均值。

我的桌子是这样的:

Date(date)       HalfHour(int)      Value(dec(18,3))
2018-04-17           1                  50
2018-04-17           2                  100
....
2018-04-17           47                 100
2018-04-17           48                 200

我想要一个可以返回这个的查询:

Date(date)       Hour(int)      Value(dec(18,3))
2018-04-17           1                  75
....
2018-04-17           24                 150

有一个 ID 列,但它不能用于此目的,因为它有喘气,因此是一致的。

而且我知道我必须按功能使用分组,但不知道如何使用。

【问题讨论】:

  • 按 halfHour/2 分组(或类似的东西)
  • 如果对答案满意,请标记为已回答。

标签: sql-server group-by average


【解决方案1】:

也许……

SELECT [date]
       (HalfHour + 1) / 2 AS [Hour], --This ASSUMES HalfHour is the datatype int, due to integer maths
       AVG([Value]) As [Value]
FROM YourTable
GROUP BY [Date],       
         (HalfHour + 1) / 2;

【讨论】:

  • 工作得很好!谢谢!
  • 只是为了让我了解查询中发生了什么。我们有 48 个半小时,我们通过以下计算将它们转换为 24:(HalfHour +1) / 2。但例如,半小时 2 的值将是 = (2+1)/2 = 1,5,即不是整数。我不应该收到一条错误消息“无法将 1,5 转换为数据类型 int”吗? - 查询中抛出所有非整数值的原因是什么?
  • @Deldar22 在 SQL Server 中,当处理整数时,only 任何等式都会产生整数。这意味着(2+1) /2 = 3 / 2 = 1.5 丢失,因为您使用的是整数。但是,如果您要将等式更改为(2 + 1.0) / 2,因为您不是处理整数,结果将是1.500000。这是因为小数在 SQL Server 中的数据优先级高于整数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多