【问题标题】:SQL Server 2008 Retrieve Average values by timeSQL Server 2008 按时间检索平均值
【发布时间】:2013-12-22 23:44:42
【问题描述】:

我有下表。

我所追求的是检索按时间分组的 value 字段的 5 分钟平均值的 SQL。 运行查询后我想要的输出应如下所示:

另外,我希望能够轻松修改 SQL 以获得 10 分钟平均值、每日平均值等。

如上所示用于创建sample_table的SQL如下。

CREATE TABLE dbo.sample_table
(
id int NULL,
time_value datetime NULL,
value real NULL
)  ON [PRIMARY];

insert INTO sample_table VALUES (1,'2013-12-23 08:00:00.000',86);
insert INTO sample_table VALUES (2,'2013-12-23 08:02:00.000',49);
insert INTO sample_table VALUES (3,'2013-12-23 08:03:00.000',27);
insert INTO sample_table VALUES (4,'2013-12-23 08:05:00.000',81);
insert INTO sample_table VALUES (5,'2013-12-23 08:07:00.000',48);
insert INTO sample_table VALUES (6,'2013-12-23 08:08:00.000',52);
insert INTO sample_table VALUES (7,'2013-12-23 08:09:00.000',57);
insert INTO sample_table VALUES (8,'2013-12-23 08:10:00.000',62);
insert INTO sample_table VALUES (9,'2013-12-23 08:11:00.000',75);
insert INTO sample_table VALUES (10,'2013-12-23 08:12:00.000',90);

感谢任何帮助。

【问题讨论】:

    标签: sql database sql-server-2008 group-by


    【解决方案1】:

    您需要将时间值四舍五入到最接近的五分钟。这在 SQL Server 中有点难看,但可行:

    select dateadd(minute, 5*(datediff(minute, 0, time_value)/5), 0) as MyTimeValue,
           avg(cast(value as float))
    from t
    group by dateadd(minute, 5*(datediff(minute, 0, time_value)/5), 0);
    

    注意:value 看起来像一个整数。 SQL Server 将整数的平均值计算为整数。因此,1、1 和 2 的平均值是 1 而不是 1.333。

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      相关资源
      最近更新 更多