分组方式中的mysql max函数
我尝试在mysql中获取项目,我需要从结果t2中删除项目,这些项目的状态\ id=17,状态\更改\日期小于为t1创建的最大日期\日期分组方式中的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 | -----------
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);