mysql - SQL 从两个不同的表中选择相同的列
问题描述
我希望你们一切都好!
我处于一种情况,我必须进行 SQL 查询才能从具有相同类型数据的两列中获取最小值和最大值,这些数据仅限于每个相同名称但在两个不同表中的数据。目前我有一个查询,我可以从其中一个表中获取它,但我无法理解如何获取两个表之间的 MIN 日期时间值和两个表之间的 MAX 日期时间值。
为了只从一张表中获取 MAX 和 MIN,我这样做:
SELECT idprojects, projectname, MIN(startDate), MAX(endDate)
FROM projects,
tasks
WHERE idprojects = projectid
GROUP BY projectid
基本上,这些表是任务表和子项目任务表,我不想通过显示最早的日期时间任务/sptask 的第一个日期和最新的日期时间任务/sptask 来显示整个项目的持续时间。我的表如下所示:
所以我想得到的结果只有一行公关。投影与:
| projectName | idprojects | MIN(startDate) | MAX(endDate) |
其中 MIN(startDate) 和 MAX(startDate) 是 sptasks 和 tasks 表之间的所有最小和最大日期时间值。
我真的希望有人可以在这里帮助我,因为我一直在尝试的时间无处可去。
祝你好运,注意安全!
解决方案
您可以使用left join
,因为不必为每个项目提供 task 或 sptask。此外,您可以使用greatest
andleast
如下:
SELECT p.idprojects, p.projectname,
MIN(least(coalesce(t.startDate,s.startdate),
coalesce(s.startDate,t.startdate))) as startdate,
MAX(greatest(coalesce(t.endDate,s.enddate),
coalesce(s.endDate,t.enddate))) as enddate
FROM projects p
left join tasks t on p.idprojects = t.projectid
left join sptasks s on p.idprojects = s.projectid
GROUP BY p.idprojects, p.projectname
推荐阅读
- python - 如何修复 Heroku 托管的 discord.py 机器人无法上线?
- c# - 在 where 子句中带有 linq 的 NullReferenceException
- javascript - 在循环中的每次点击之间设置延迟
- javascript - 用 iMaskInput mixin 包装 Antd 的 Input 设置正确的 ref
- c - 创建硬编码定义的变体
- javascript - 表单内的命名元素如何干扰全局命名空间?
- php - 如何查找名称以点开头的文件和文件夹?
- angular - 角度路由只是附加到 url 而不是进入新页面
- regex - 如何用正则表达式拆分红宝石字符串?
- scala - 如何有效地结合未来的结果作为未来