mysql - MySQL UPDATE 与 JOINS 使用 MAX
问题描述
我不是 MySQL 大师。我正在尝试从列中获取update
表格。clients.converted
projects.last_update
DATETIME:(clients.converted
截至目前的新列)。
日期时间:projects.last_update
。
布尔值:projects.converted
。
对于每个客户的项目,都有可能以转换结束项目,如果是这样,我愿意。prospect-to-client
(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;
很感谢任何形式的帮助!提前致谢。
解决方案
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
;
推荐阅读
- asp.net-core - KSQLDB asp.net 核心
- arrays - 如何对字符串和整数数组进行排序以首先在 ruby 中显示排序的整数
- python - 文件对话框总是返回 alpha 顺序
- python - 如何获取我的 django 模板标签的 Groupby 计数?
- sqlite - Saving a list with SQL
- google-cloud-platform - ImportError:无法从“google.cloud.bigquery.external_config”导入名称“HivePartitioningOptions”
- asp.net-identity - 将用户从 .NET 4.x MVC 应用程序自动登录到使用 IdentityServer4 的 .NET 5 应用程序的适当方法?
- javascript - 无法获取“类名”的类型定义
- javascript - 验证输入文件
- visual-studio-code - VSCode 扩展 api – 使用 ThemeIcon 的文件类型/扩展图标