我正在尝试编写一个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不得而知.
知道我是怎么做的吗?
您需要使用以下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条款.