繁体   English   中英

使用MAX随机播放记录

[英]Using MAX shuffles records around

我有以下影响表:

在此处输入图片说明

我需要获得利益相关者的最新影响力...

我有以下查询,但由于MAX没有返回完整的记录,所以它混淆了行数据:

SELECT stakeholder_id, MAX(created_at) AS maxca, influence
FROM influences
WHERE
project_id = 1 AND
deleted_at IS NULL
GROUP BY stakeholder_id

在此处输入图片说明

您可以看到,对那个maxca和interestholder_id的影响应该是3,而不是5。

我该如何克服这个问题? 我现有的全部陈述是这样的:

SELECT `stakeholders`.*, `influences`.`influence`
FROM `project_stakeholder`
INNER JOIN `stakeholders` ON `project_stakeholder`.`stakeholder_id` = `stakeholders`.`id`
INNER JOIN `stakeholder_profiles` ON `stakeholder_profiles`.`stakeholder_id` = `stakeholders`.`id`
LEFT JOIN `stakeholder_profile_tag` ON `stakeholder_profile_tag`.`stakeholder_profile_id` = `stakeholder_profiles`.`id`
LEFT JOIN `stakeholder_profile_group` ON `stakeholder_profile_group`.`stakeholder_profile_id` = `stakeholder_profiles`.`id`
LEFT JOIN `influences` ON `influences`.`stakeholder_id` = `stakeholders`.`id`
INNER JOIN `projects` ON `project_stakeholder`.`project_id` = `projects`.`id`


LEFT JOIN (

    /*! This is the bit that doesn't work */
    SELECT stakeholder_id, MAX(created_at) AS maxca
    FROM influences
    WHERE
    project_id = 1 AND
    deleted_at IS NULL
    GROUP BY stakeholder_id


) 

iu ON `iu`.`stakeholder_id` = influences.stakeholder_id AND 
iu.maxca = influences.created_at



WHERE `projects`.`id` = '1'
GROUP BY `stakeholders`.`id`

这似乎可行:

SELECT `stakeholders`.*, iu.influence
FROM `project_stakeholder`
INNER JOIN `stakeholders` ON `project_stakeholder`.`stakeholder_id` = `stakeholders`.`id`
INNER JOIN `stakeholder_profiles` ON `stakeholder_profiles`.`stakeholder_id` = `stakeholders`.`id`
LEFT JOIN `stakeholder_profile_tag` ON `stakeholder_profile_tag`.`stakeholder_profile_id` = `stakeholder_profiles`.`id`
LEFT JOIN `stakeholder_profile_group` ON `stakeholder_profile_group`.`stakeholder_profile_id` = `stakeholder_profiles`.`id`
INNER JOIN `projects` ON `project_stakeholder`.`project_id` = `projects`.`id`


LEFT JOIN (

    select i1.*
    from influences i1
    join
    (
        SELECT stakeholder_id, MAX(created_at) AS maxca
        FROM influences
        WHERE project_id = 1 
        AND deleted_at IS NULL
        GROUP BY stakeholder_id
    ) i2 on i1.stakeholder_id = i2.stakeholder_id
        and i1.created_at = i2.maxca

) iu ON `iu`.`stakeholder_id` = stakeholders.id



WHERE `projects`.`id` = '1'
GROUP BY `stakeholders`.`id`
select i1.*
from influences i1
join
(
    SELECT stakeholder_id, MAX(created_at) AS maxca
    FROM influences
    WHERE project_id = 1 
    AND deleted_at IS NULL
    GROUP BY stakeholder_id
) i2 on i1.stakeholder_id = i2.stakeholder_id
    and i1.created_at = i2.maxca

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM