第一篇文章在这里...我正在尝试在过去 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)
上建立索引。