复杂选择查询,按DAY平均时间序列,使用平均值为0的天数作为另一个选择中的条件

时间:2014-09-23 18:11:45

标签: mysql datetime time-series

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

我想要完成的是:

我有一张名为inodes_data的表格。我正在尝试对名为sens2的列进行平均,其中i_id等于19371,其中Time介于'20140601' AND '20140831' ...

之间

这是我的问题。我需要仅在DAYS中包含行(如午夜到晚上11:59),来自同一I_ID表的另一个99101inodes_data)的DAILY平均值等于{{1 }} ...

如果这个解释得不好,我很抱歉,因为我发现很难描述。

1 个答案:

答案 0 :(得分:2)

您几乎可以将您的问题直接翻译成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
                   );

通常,显式连接的执行效果优于in,因此您应该使用此版本:

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;