Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对组中上次更新的数据求和_Sql_Sql Server - Fatal编程技术网

Sql 对组中上次更新的数据求和

Sql 对组中上次更新的数据求和,sql,sql-server,Sql,Sql Server,因此,我们有一个表格,在这个表格中,我们每小时存储几个房间的预测噪音水平,以及预测时间 但是这种预测一天可能会改变好几次,当这种情况发生时,我们会向表中添加一个新行,以保留历史记录,因此我们有如下内容: +----+----+-------+--------+------+-------+---------------------+ | room_id | reference_date | hour | noise | update_time | +----+----+-----

因此,我们有一个表格,在这个表格中,我们每小时存储几个房间的预测噪音水平,以及预测时间

但是这种预测一天可能会改变好几次,当这种情况发生时,我们会向表中添加一个新行,以保留历史记录,因此我们有如下内容:

+----+----+-------+--------+------+-------+---------------------+
| room_id | reference_date | hour | noise |     update_time     |
+----+----+-------+--------+------+-------+---------------------+
|    1    |   2019-06-13   |   8  |    0  | 2019-06-13 07:15:23 |
|    1    |   2019-06-13   |   9  |    5  | 2019-06-13 07:15:23 |
|    2    |   2019-06-13   |   8  |    2  | 2019-06-13 07:15:23 |
|    1    |   2019-06-13   |   8  |    5  | 2019-06-13 08:15:23 |
|    1    |   2019-06-13   |   9  |    5  | 2019-06-13 08:15:23 |
+---------+--------+--------+-----+-------+---------------------+
现在,我们要对一整天的预测噪声级求和,但仅使用最后一次更新时间,否则一天中的同一小时将有多个条目,而不是只有一个条目

我只尝试了几个示例,但无法使用单个查询,我们使用的是SQL Server 14.0.3030.27。我可以在代码中完成,但我相信有更好的解决方案

查询结果应该是这样的

+----+----+-------+--------+------+-------+----+
| room_id | reference_date | total_daily_noise |
+----+----+-------+--------+-------------------+
|    1    |   2019-06-13   |        10         |
+---------+--------+-------+-------------------+
是否可以使用单个查询执行此操作

提前感谢您的帮助

行数()
是获取每小时最新预测的一种方法:

select room_id, reference_date, sum(noise) as noise
from (select t.*,
             row_number() over (partition by room_id, reference_date, hour order by update_time desc) as seqnum
      from t
     ) t
where seqnum = 1
group by room_id;
另一种方法使用相关子查询:

select room_id, reference_date, sum(noise) as noise
from t
where t.update_time = (select max(t2.update_time)
                       from t t2
                       where t2.room_id = t.room_id and
                             t2.reference_date = t.reference_date and
                             t2.hour = t.hour
                      )
group by room_id;

为什么房间2不在预期结果中?第一个查询应该包括
room\u id
分区by
@Squirrel中。非常感谢。