Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:查询多个表,只查询其中一个表的最新结果,以及另一个表的所有结果_Mysql_Sql - Fatal编程技术网

Mysql SQL:查询多个表,只查询其中一个表的最新结果,以及另一个表的所有结果

Mysql SQL:查询多个表,只查询其中一个表的最新结果,以及另一个表的所有结果,mysql,sql,Mysql,Sql,我有许多表,我试图在一个查询中从其中的许多表中提取数据。我已经研究出如何成功地使用左连接从其他表中提取具有公共ID的相关数据 通过这个查询,我试图在ASSOCIATES\u BACKGROUND\u数据表中获取每个联系人的数据 首先,我试图在ASSOCIATES_1_to_1S.DATE_OF_meeting中查找他们最近的会议(这将存储为时间戳,因此仅查找最大的时间戳)-我没有得到正确的结果,我是否正确使用了MAX函数 其次,我想获取ASSOCIATES\u ACTION\u步骤中该assoc

我有许多表,我试图在一个查询中从其中的许多表中提取数据。我已经研究出如何成功地使用
左连接
从其他表中提取具有公共ID的相关数据

通过这个查询,我试图在ASSOCIATES\u BACKGROUND\u数据表中获取每个联系人的数据

首先,我试图在
ASSOCIATES_1_to_1S.DATE_OF_meeting
中查找他们最近的会议(这将存储为时间戳,因此仅查找最大的时间戳)-我没有得到正确的结果,我是否正确使用了
MAX
函数

其次,我想获取
ASSOCIATES\u ACTION\u步骤中该
associated\u ID
的所有记录。正确的连接似乎也没有把这个拉进来

有人能帮忙吗?感觉我很快就要得到结果了,但这真的让我很烦

SELECT *, 
        ASSOCIATES_BACKGROUND_DATA.ASSOCIATE_ID as ABG_ASSOCIATE_ID,
            ASSOCIATES_BACKGROUND_DATA.NAME_KNOWN_AS as ABG_NAME_KNOWN_AS, 
        ASSOCIATES_BACKGROUND_DATA.LAST_NAME as ABG_LAST_NAME, 
        USERS.NAME_KNOWN_AS as USERS_NAME_KNOWN_AS, 
        USERS.LAST_NAME as USERS_LAST_NAME, 
        MAX(ASSOCIATES_1_TO_1S.DATE_OF_MEETING)
    FROM ASSOCIATES_BACKGROUND_DATA
 LEFT JOIN ASSOCIATES_1_TO_1S
        ON ASSOCIATES_BACKGROUND_DATA.ASSOCIATE_ID = ASSOCIATES_1_TO_1S.ASSOCIATE_ID
 LEFT JOIN LIST_OF_UNIVERSITIES
        ON ASSOCIATES_BACKGROUND_DATA.UNIVERSITY = LIST_OF_UNIVERSITIES.ID
 LEFT JOIN USERS
        ON ASSOCIATES_BACKGROUND_DATA.PROGRAMME_COORDINATOR = USERS.ID
 RIGHT JOIN ASSOCIATES_ACTION_STEPS
        ON ASSOCIATES_BACKGROUND_DATA.ASSOCIATE_ID = ASSOCIATES_ACTION_STEPS.ASSOCIATE_ID
  GROUP BY ASSOCIATES_1_TO_1S.ASSOCIATE_ID
  ORDER BY `ABG_NAME_KNOWN_AS` ASC

非常感谢您提供的任何帮助或建议…

我查看了您的查询。对我来说,第一步是重新格式化它,使其更具可读性(如果您花时间在查询上,这一点非常重要,您不需要任何开销)

之后,我回顾了逻辑,得出了两个结论:

  • 你不需要一个正确的加入
  • 您的分组算法不太正确
请查看此查询并告诉我是否缺少某些内容:

SELECT 
    abg.ASSOCIATE_ID as ABG_ASSOCIATE_ID,
    abg.NAME_KNOWN_AS as ABG_NAME_KNOWN_AS, 
    abg.LAST_NAME as ABG_LAST_NAME, 
    u.NAME_KNOWN_AS as USERS_NAME_KNOWN_AS, 
    u.LAST_NAME as USERS_LAST_NAME, 
    t.lastmeeting
FROM ASSOCIATES_BACKGROUND_DATA abg 
        LEFT JOIN (
            SELECT 
                abg.ASSOCIATE_ID as id,
                MAX(a1s.DATE_OF_MEETING) AS lastmeeting
            FROM ASSOCIATES_BACKGROUND_DATA abg
                LEFT JOIN ASSOCIATES_1_TO_1S a1s ON abg.ASSOCIATE_ID = a1s.ASSOCIATE_ID
            GROUP BY abg.ASSOCIATE_ID
            ) t ON t.id = abg.ASSOCIATE_ID
        LEFT JOIN ASSOCIATES_ACTION_STEPS aas ON abg.ASSOCIATE_ID = aas.ASSOCIATE_ID
        LEFT JOIN USERS u ON abg.PROGRAMME_COORDINATOR = u.ID
ORDER BY abg.NAME_KNOWN_AS
我尽量不使用mysql对其
groupby
函数的许可(mysql允许您使用不包括所有选定字段的groupby指令),并坚持标准。但是,有必要进行子查询(参见
t
别名),预先计算每个关联的最大(日期),以便稍后将其与主记录集合并

干杯

附言:你可以再次加入加入大学,我跳过它只是为了孤立问题

PPS:为了反映您的评论,我构建了以下查询:

SELECT 
    abg.ASSOCIATE_ID as ABG_ASSOCIATE_ID,
    abg.NAME_KNOWN_AS as ABG_NAME_KNOWN_AS, 
    abg.LAST_NAME as ABG_LAST_NAME, 
    u.NAME_KNOWN_AS as USERS_NAME_KNOWN_AS, 
    u.LAST_NAME as USERS_LAST_NAME, 
    t.lastmeeting,
    t2.av AS averagetimedue
FROM ASSOCIATES_BACKGROUND_DATA abg 
        LEFT JOIN (
            SELECT 
                abg.ASSOCIATE_ID as id,
                MAX(a1s.DATE_OF_MEETING) AS lastmeeting
            FROM ASSOCIATES_BACKGROUND_DATA abg
                LEFT JOIN ASSOCIATES_1_TO_1S a1s ON abg.ASSOCIATE_ID = a1s.ASSOCIATE_ID
            GROUP BY abg.ASSOCIATE_ID
            ) t ON t.id = abg.ASSOCIATE_ID
        LEFT JOIN (
            SELECT
                (AVG(DATE_DUE)+AVG(DATE_COMPLETED))/2 AS av,
                ASSOCIATE_ID
            FROM ASSOCIATES_ACTION_STEPS
            GROUP BY ASSOCIATE_ID
            ) t2 ON abg.ASSOCIATE_ID = t2.ASSOCIATE_ID
        LEFT JOIN ASSOCIATES_ACTION_STEPS aas ON abg.ASSOCIATE_ID = aas.ASSOCIATE_ID
        LEFT JOIN USERS u ON abg.PROGRAMME_COORDINATOR = u.ID
ORDER BY abg.NAME_KNOWN_AS

我不确定你对到期日和完成日之间的平均时间的定义。

Hi@Sebas,是的,这是使用PHP根据完成行动步骤和截止日期之间的时间计算平均值。非常感谢@Sebas,这真的很棒!您知道是否有可能从Action steps表中每个员工ID的所有结果中获得DATE_DUE和DATE_COMPLETED之间的平均时间?或者我应该用PHP来实现这一点?真的需要为这类事情学习更多的SQL!再次感谢您的帮助,非常感谢:-)嗨@Sebas,再次感谢您的额外询问!但我不确定它是否正是我们想要的。有没有办法联系你的自由职业者工作,以帮助这一点?我们还想从这个查询中提取一些额外的信息…我看不到电子邮件地址,尽管你的linkedin个人资料在那里,但我没有一个高级linkedin帐户可以通过这种方式与你联系。如果你能提供帮助的话,尽快谈论这件事会很好吗?我只是补充了一下,也许这需要时间去思考。在gmail.com上查看sebastien.ratez谢谢,即将发送电子邮件