gpt4 book ai didi

mysql - 查询2个表之间的mysql连接

转载 作者:行者123 更新时间:2023-11-29 19:14:33 25 4
gpt4 key购买 nike

我有 2 张 table

Matricule   date             presence minutes
248 31/01/2017 500
248 01/02/2017 400
248 02/02/2017 300

第二个表:

matricule  date_effet      time_passed_project
248 31/01/2017 250
248 31/01/2017 250
248 01/02/2017 300
248 02/02/2017 150
248 02/02/2017 100

我想要提取的是一名员工从事项目的日期少于他在场的时间,因为我知道一名员工可以在一天内从事多个项目,或者只能在一个项目中工作,例如在本例中是 2017 年 1 月 31 日员工在 250 和 250 两个项目中工作,总数为 500,如第一个表,但其余部分与第一个表不同,这是我想要提取的日期,因为在这种情况下,用户将选择一个范围日期日期可能在 2017 年 1 月 28 日至 2017 年 2 月 2 日之间

最佳答案

您可以通过两个步骤来实现这一目标。首先,将第二个表中每个日期(针对每个矩阵)所花费的总时间作为子查询进行聚合。然后,将此子查询连接到第一个表,并保留那些工作时间小于存在时间且匹配记录也在您指定的日期范围内的记录。

SELECT t1.matricule, t1.date, t1.`presence minutes`
FROM table1 t1
INNER JOIN
(
SELECT matricule, date_effet, SUM(time_passed_project) AS total_time
FROM table2
GROUP BY matricule, date_effet
) t2
ON t1.matricule = t2.matricule AND
t1.date = t2.date_effet
WHERE t2.total_time < t1.`presence minutes` AND
t1.date BETWEEN '2017-01-28' AND '2017-02-02'

使用您提供的示例数据的上述查询的输出是以下两个日期:

01/02/2017
02/02/2017

顺便说一句,如果您确实将日期存储为文本(这就是格式所建议的),您应该认真考虑使用日期类型,例如 datetime。这样做将使您的数据处理变得更加容易。减去 WHERE 子句,我的查询甚至应该适用于文本日期。如果您的日期确实是文本,您可能必须将 WHERE 子句替换为以下内容:

WHERE STR_TO_DATE(t1.date, '%d/%m/%Y') BETWEEN '2017-01-28' AND '2017-02-02'

此处演示:

Rextester

关于mysql - 查询2个表之间的mysql连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42813839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com