我不是MySQL专家。
我正在尝试从update
列中clients.converted
表projects.last_update
。
DATETIME :clients.converted
(截至目前的新列)。
DATETIME :projects.last_update
。
布尔语:projects.converted
。
对于每个客户的项目,可以通过prospect-to-client
转换来 结束 该项目,如果可以,{ {1}}会(boolean) projects.converted
吗?
我要在TRUE
上执行UPDATE
语句,以从clients
clients.converted
项目的MAX(projects.last_update)
中填充WHERE
。
到目前为止,我已经尝试了一些查询,但是这以一种不太混乱的方式理解了这个想法:
projects.converted = true
但是它不起作用(因为我不能在分配时直接使用UPDATE clients AS `Client`
INNER JOIN projects AS `Project` ON Project.client_id = Client.id
SET Client.converted = MAX(Project.last_update)
WHERE Project.converted = TRUE;
函数)并且我已经用完如何使用MAX
和UPDATE
来完成JOINS
的想法了MAX
函数已应用于DATETIME
列。
我做了一个
SELECT
语句来收集我首先需要的信息,然后 它就像一种魅力:
SELECT Client.id, count(*), MAX(Project.last_update) FROM projects AS `Project`
LEFT JOIN clients AS `Client` ON Client.id = Project.client_id
WHERE Project.converted = TRUE
GROUP BY Client.id;
非常感谢您的帮助! 预先感谢。
答案 0 :(得分:2)
MAX是一个聚合函数,这意味着如果没有GROUP BY,则不能(或者通常不应使用);您将需要使用子查询。
UPDATE clients AS `Client`
INNER JOIN (SELECT client_id, MAX(last_update) AS max_lu
FROM projects
WHERE converted = TRUE
GROUP BY client_id
) AS `Project` ON Project.client_id = Client.id
SET Client.converted = Project.max_lu
;