Mysql 复杂的select查询,按天计算时间序列的平均值,在另一个select查询中使用平均值为0的天数作为条件

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

我不是一个超级高级的MySQL用户,所以我向so寻求帮助

我试图做到的是:

我有一个名为
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
允许使用索引,您可能会获得更好的性能。对此进行测试并抽查结果,但我觉得这正是我想要的。如果是的话,我们将很快接受。非常感谢。