2017-08-10 67 views
0

我有一个列出ID,月份和值的表格。我想查询此表以找到min(month) where value <= 0在MIN日期和MIN日期+ 11个月之间进行选择 - MySQL

我很困难以不会调用同一表多次的方式编写此表,因为表格大约是10毫米行。

到目前为止,我所写的使用HAVING子句来检查month between min(month) and min(month) + 11,但它没有正常工作。该查询不返回任何数据。

select id, month from table 
group by id 
having month between min(month) and date_add(min(month), interval 11 month) 

有没有一种干净的方式来做到这一点,而不嵌套查询和多次调用同一个表?

回答

3

你基本上需要扫描表两次。基本上,查询是这样的:

使这次更快兑现子查询和 id添加索引
select t.* 
from t join 
    (select id, min(yyyymm) as minyyyymm 
     from t 
     where val < 0 
     group by id 
    ) tt 
    on t.id = tt.id and t.yyyymm >= minyyyymm and 
     t.yyyymm <= minyyyymm + interval 11 month; 

一个选项。

相关问题