如何解决如何在SELECT查询MySQL
我一直在尝试找出如何将子查询合并到我的工作SELECT查询中。下面是我的查询,该查询从projects表中获取项目名称,并通过左联接在project_work表中获取日期。 project_id是连接到项目表(id)的前键。
SELECT projects.Project_Name,project_work.Completed_Date
FROM projects LEFT JOIN project_work ON projects.id=project_work.project_id
上面的查询显示以下内容:
+---------------+---------------+
| Project Name | Completed Date|
+------+--------+---------+------
| John Smith | 2020-10-06 |
+------+--------+---------+------
| John Smith | 2020-10-09 |
+------+--------+---------+------
| John Smith | 2020-10-08 |
+------+--------+---------+------
| Jane Doe | 2020-10-12 |
+------+--------+---------+------
| Jane Doe | 2020-10-04 |
+------+--------+---------+------
我希望子查询查看属于同一项目名称的每个日期,并且仅显示最近的日期:
+---------------+---------------+
| Project Name | Completed Date|
+------+--------+---------+------
| John Smith | 2020-10-09 |
+------+--------+---------+------
| Jane Doe | 2020-10-12 |
+------+--------+---------+------
我试图添加类似以下内容的内容,但一直出现语法错误。显然,这是不正确的。有人可以向我解释在这种情况下使用子查询的正确方法吗?
WHERE projects.id=project_work.project_id
SELECT MAX(project_work.Completed_Date)
FROM project_work
ORDER BY project_work.Completed_Date ASC
LIMIT 0,1
解决方法
有不止一种可能性
SELECT
projects.Project_Name,project_work.Completed_Date
FROM
projects
LEFT JOIN
(SELECT
project_id,MAX(project_work.Completed_Date)
FROM
project_work
GROUP BY project_id) ON projects.id = project_work.project_id;
OR
SELECT
projects.Project_Name,project_work.Completed_Date
FROM
projects
LEFT JOIN
project_work ON projects.id = project_work.project_id
WHERE
project_work.Completed_Date = (SELECT
MAX(Completed_Date)
FROM
Completed_Date
WHERE
project_id = projects.id)
,
您不需要子查询,只需:
SELECT projects.Project_Name,MAX(project_work.Completed_Date)
FROM projects
LEFT JOIN project_work ON projects.id=project_work.project_id
GROUP BY projects.Project_Name
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。