微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅根据多连接中的一列返回最小记录

如何解决仅根据多连接中的一列返回最小记录

我有一个带有几个连接的查询,它返回两条记录,我只希望它为每个 acme_id 返回一条记录,即最小的 acme_client_id。 (或者最小的 acme_client.client_id,我不在乎哪个。)我尝试了很多不同的,但我无法让它工作。

SELECT
    acme_client_id,acme_client.client_id,acme_id
FROM
    acme_client WITH (NOLOCK)
    LEFT JOIN client WITH (NOLOCK) ON acme_client.client_id = client.client_id
    LEFT JOIN acme_client_information WITH (NOLOCK) ON client.acme_client_information_id = acme_client_information.acme_client_information_id
WHERE
    acme_client.acme_decisionmaker_ind = 1
    and acme_client.acme_current_owner_ind = 0
    AND (
        acme_client.participant_start_date IS NULL
        OR acme_client.participant_start_date < GETDATE()
    )
    AND (
        acme_client.participant_end_date IS NULL
        OR acme_client.participant_end_date > GETDATE()
    )
    AND (
        acme_client.acme_client_id IN (
            SELECT
                acme_cooperating_entity_client.acme_client_id
            FROM
                acme_cooperating_entity_client WITH (NOLOCK)
        )
    )
)

解决方法

可能是这样的

SELECT min(ac.acme_client_id) min_ac_id,min(ac.client_id) min_c_id,ac.acme_id
FROM acme_client ac
     join acme_cooperating_entity_client acec on ac.acme_client_id=acec.acme_client_id
     LEFT JOIN client c ON ac.client_id = c.client_id
     LEFT JOIN acme_client_information aci ON c.acme_client_information_id = aci.acme_client_information_id
WHERE ac.acme_decisionmaker_ind = 1 
      and ac.acme_current_owner_ind = 0
      AND (ac.participant_start_date IS NULL
           OR ac.participant_start_date < GETDATE())
      AND (ac.participant_end_date IS NULL
           OR ac.participant_end_date > GETDATE())
group by ac.acme_id;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。