Mysql 复杂的select查询,按天计算时间序列的平均值,在另一个select查询中使用平均值为0的天数作为条件
我不是一个超级高级的MySQL用户,所以我向so寻求帮助 我试图做到的是: 我有一个名为Mysql 复杂的select查询,按天计算时间序列的平均值,在另一个select查询中使用平均值为0的天数作为条件,mysql,datetime,time-series,Mysql,Datetime,Time Series,我不是一个超级高级的MySQL用户,所以我向so寻求帮助 我试图做到的是: 我有一个名为inodes\u data的表。我试图对一个名为sens2的列求平均值,其中I_id等于19371,其中Time介于'20140601'和'20140831'之间 这是我的问题。我只需要包括来自同一inodes\u数据表的另一I_ID(99101)的日平均值等于0的天(如午夜到晚上11:59)的行 如果解释得不好,我很抱歉,因为我发现很难描述 您几乎可以将问题直接转换为MySQL语句,如下所示: select
inodes\u data
的表。我试图对一个名为sens2
的列求平均值,其中I_id
等于19371
,其中Time
介于'20140601'和'20140831'之间
这是我的问题。我只需要包括来自同一inodes\u数据表的另一I_ID
(99101
)的日平均值等于0
的天(如午夜到晚上11:59)的行
如果解释得不好,我很抱歉,因为我发现很难描述 您几乎可以将问题直接转换为MySQL语句,如下所示:
select avg(sens2)
from inodes_data id
where time between '20140601' and '20140831' and
i_id = 19371 and
date(time) in (select date(time)
from inodex_data id2
where i_id = 99101
group by date(time)
having avg(sens2) = 0
);
通常,显式联接的性能优于
中的,因此您应该使用以下版本:
select avg(sens2)
from inodes_data id join
(select date(time) as d
from inodex_data id2
where i_id = 99101
group by date(time)
having avg(sens2) = 0
) d99101
on date(id.time) = d99101.d
where time between '20140601' and '20140831' and
i_id = 19371;
请提供模式和示例数据。。。。。。根据样本得出的预期结果总结前面两条评论,阅读如何制定一个合适的问题。通过将ON
子句更改为ON id.time>=d99101.d和id.time
允许使用索引,您可能会获得更好的性能。对此进行测试并抽查结果,但我觉得这正是我想要的。如果是的话,我们将很快接受。非常感谢。