在mysql sql where子句中类似于MAX的东西

Ste*_*ers 4 mysql sql

我正在尝试编写一个sql函数来执行以下操作:

SELECT
    person.id, 
    person.phonenumber
FROM
    person INNER JOIN activity ON person.id = activity.personid
WHERE
    MAX(activity.activitydate) < DATE_SUB(CURDATE(), INTERAVAL 180 DAY);
Run Code Online (Sandbox Code Playgroud)

每次联系一个人时,我们都会为他们创建一个带有笔记等的活动记录.所以我正在寻找在过去180天内没有联系过的所有人.显然,这不起作用,因为max不能在where子句中使用.

我看到了这个,但是mysql没有with语句.

另外,我试过了

SELECT 
    person.id, 
    person.phonenumber, 
    MAX(activity.activitydate) as ndate
FROM 
    person INNER JOIN activity ON person.id = activity.personid
WHERE 
    ndate < DATE_SUB(CURDATE(), INTERVAL 180 DAY)
GROUP BY person.id;
Run Code Online (Sandbox Code Playgroud)

但ndate不得而知.

知道我是怎么做的吗?

OMG*_*ies 9

您需要使用以下HAVING条款:

  SELECT p.id, 
         p.phonenumber
    FROM PERSON p 
    JOIN ACTIVITY a ON a.personid = p.id
GROUP BY p.id, p.phonenumber
  HAVING MAX(a.activitydate) < DATE_SUB(CURDATE(), INTERVAL 180 DAY)
Run Code Online (Sandbox Code Playgroud)

......这意味着定义一个GROUP BY条款.