分组方式中的mysql max函数

分组方式中的mysql max函数,mysql,join,group-by,Mysql,Join,Group By,我尝试在mysql中获取项目,我需要从结果t2中删除项目,这些项目的状态\ id=17,状态\更改\日期小于为t1创建的最大日期\日期 t1: ----- |id | ----- | 1 | ----- t2: --------------------------------------------------------------- | id | t1_id | status_change_date | status_id | date_created | -----------

我尝试在mysql中获取项目,我需要从结果t2中删除项目,这些项目的状态\ id=17,状态\更改\日期小于为t1创建的最大日期\日期

t1:  
-----
|id |
-----
| 1 |
-----


t2:
---------------------------------------------------------------
| id | t1_id | status_change_date | status_id |  date_created | 
---------------------------------------------------------------
|  1 |     1 | 2006-02-12         |        17 |  2004-02-12   | 
|  2 |     1 | 2006-02-12         |        17 |  2006-02-12   | 
|  3 |     1 | 2010-02-12         |        17 |  2007-02-12   | 
|  4 |     1 | 2006-02-12         |        17 |  2008-02-12   | 
---------------------------------------------------------------
所以在结果中,我应该只看到id为3的项目,因为只有在这种情况下,状态_change_date才在为项目创建的max date_之后,这些项目引用了id为1的t1项目

SELECT t1.*, t2.* 
FROM t1 JOIN 
    (
     SELECT t2.*, 
     MAX(date_created) AS max_date FROM t2 WHERE t2.id NOT IN
         (
             SELECT t2.id  FROM t2
             WHERE
                 status_id = 17 
             and status_change_date < max_date
         ) 
     GROUP BY t1_id
    ) t2 ON t1.id = t2.t1_id 

但我得到了错误,因为sql不知道什么是max_date。我应该如何得到这个值

根据我对连接的理解,“From”应该在“select”语句之后

select *,left(name,1) as L1 from artists order by name limit 5;

您可以将值存储到临时变量并用于比较:

SELECT t1.*, t2.* 
FROM t1 JOIN 
    (
     SELECT t2.*, 
     @max_date:=MAX(date_created) AS max_date FROM t2 WHERE t2.id NOT IN
         (
             SELECT t2.id  FROM t2
             WHERE
                 status_id = 17 
             and status_change_date < @max_date
         ) 
     GROUP BY t1_id
    ) t2 ON t1.id = t2.t1_id 

您可以使用以下任何查询:

SELECT t1.*, 
       t2.*, 
       Max(date_created) AS max_date 
FROM   t1 
       JOIN t2 
         ON t1.id = t2.t1_id 
WHERE  status_id = 17 
GROUP  BY status_change_date 
HAVING status_change_date > max_date; 


请解释你试图用样本数据做什么,期望的结果,并给出清晰的解释。完全不清楚你在问什么。请编辑您的问题,并向我们显示示例输入和预期输出。@GordonLinoff我需要从结果t2中删除状态id=17且状态更改日期小于为此创建的最大日期的项目t1@TimBiegeleisen问题经过编辑,如果现在还不清楚,我可以提供输入和输出的示例,或者至少会引起猜测。向我们显示您的数据,然后向我们显示预期的输出。@sbk但我认为在这种情况下,我会检查所有t2项的最大日期,并需要每个t2组具有相同的t2\u id的最大日期。请尝试使用降序和限制1在子查询中的最大日期获得联接。您能获得示例吗?我认为这应该有助于:选择t1.*,tb2.*从t1左连接中选择b.*从t2 b中选择b.*,其中1个分组按b.status\u change\u date具有b.status\u change\u date>=maxb.date\u在t1.id=tb2.t1\u id上创建限制1 tb2
SELECT t1.*, 
       t2.* 
FROM   t1 
       JOIN t2 
         ON t1.id = t2.t1_id 
WHERE  status_id = 17 
       AND status_change_date > (SELECT Max(date_created) 
                                 FROM   t2);