mysql - 在 MIN 日期和 MIN 日期 + 11 个月之间进行选择 - MySQL

标签 mysql sql

我有一个表格,其中列出了 ID、月份和值。我想查询此表以找到 min(month) where value <= 0 .

我无法以一种不会多次调用同一张表的方式编写此代码,因为该表大约有 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)

有没有一种无需嵌套查询和多次调用同一个表的简洁方法?

最佳答案

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

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;

加快速度的一个选择是具体化子查询并在 id 上添加索引。

关于mysql - 在 MIN 日期和 MIN 日期 + 11 个月之间进行选择 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45621893/

相关文章:

mysql - 当找不到 id 时,查询导致 1 行具有空值

php - 获取 4 个季度 mysql 的日期

SQL 选择特定列的第一行记录

mysql - 使用 TINYINT 变量的更新语句会在 mySQL 中引发错误

php - 在Zend Framework中选择上个月的所有记录?

php - 从 cocoa 应用程序中获取 MySql 数据库 - PHP 桥接

Java Spring JPA 分页如果超过一页则不起作用

sql - 如何从sql中的列中检索特定数据类型的平均值

SQL Server : how to get specific column from stored procedure without modifying it

sql - 带有选择和值的 Postgres 插入