将一个表中的值与另一个表中具有相同属性的值的平均计算进行比较



第一篇文章在这里...我正在尝试在过去 5 分钟内从表 A 创建选择值,并将这些值逐行与另一个表中的平均值(值(进行比较。

例如:

表A

id | time_stmp         | name    | location | value
-----------------------------------------------------
1   2019-08-09-13.20     name1      loc1        450   
2   2019-08-09-13.20     name2      loc2        550
3   2019-08-09-13.20     name3      loc3        480
4   2019-08-09-13.19     name4      loc4        420
5   2019-08-09-13.19     name5      loc5        50

表B基本相同,只是值和time_stmp不同

表B

id | time_stmp         | name    | location | value
-----------------------------------------------------
1  |2019-08-09-11.20   | name1   |  loc1    |   475   
2  |2019-08-09-11.00   | name2   |  loc2    |   525
3  |2019-08-09-10.40   | name3   |  loc3    |   435
4  |2019-08-09-10.20   | name4   |  loc4    |   256
5  |2019-08-09-10.00   | name5   |  loc5    |   420

现在,我想创建 select 语句,在其中将过去 3 分钟内表 A 中的字段(值(与名称和位置相同的表 B 的平均值进行比较。

我尝试了类似的东西:

select
ta.name,
ta.location,
ta.value from tableA ta 
where ta.value < (select avg(value) from tableB tb
inner join tableB tb on tb.name=ta.name and tb.location=ta.location)

但并没有完全奏效...

输出应仅为表 A 中的值,其中值小于完整第二个表的平均值。

有什么建议吗?

如果我理解正确:

select a.*
from table a 
where a.time_stamp > current_timestamp - 5 minute and
a.value < (select avg(b.value)
from tableB b
where b.name = a.name and b.location = a.location
);

为了提高性能,您需要在tableB(name, location, value)tableA(time_stamp)上建立索引。

相关内容

  • 没有找到相关文章

最新更新