可以使用子查询和INNER JOIN来实现对a.talent_user_id和a.company_id进行过滤,只需要最新的一条。示例代码如下:

SELECT * FROM (
    SELECT a.id, b.id AS seaservice_id, a.create_time, b.talent_user_id, b.company_id, b.title, b.pay_amount, b.payment_way, b.currency, b.completion_time, b.sea_service_status, b.service_address,
    COALESCE(c.short_name_cn, e.realname, e.nickname, e.username) AS companyName, a.status AS applyStatus, IFNULL(d.has_withdraw,0) as hasWithdraw
    FROM (
        SELECT id, talent_user_id, company_id, create_time, status, seaservice_id
        FROM (
            SELECT id, talent_user_id, company_id, create_time, status, seaservice_id, 
            ROW_NUMBER() OVER (PARTITION BY talent_user_id, company_id ORDER BY create_time DESC) AS row_num
            FROM iw_seaservice_apply
        ) AS sub
        WHERE row_num = 1
    ) AS a
    INNER JOIN iw_seaservice b ON a.seaservice_id = b.id
    LEFT JOIN iw_company c ON a.company_id = c.id
    LEFT JOIN iw_seaservice_completion_apply d ON a.id = d.seaservice_apply_id 
    LEFT JOIN iw_talent_user e ON a.talent_user_id = e.id
) T ${ew.customSqlSegment}
<if test="minPayAmount != null">
    AND pay_amount &gt;= #{minPayAmount}
</if>
<if test="maxPayAmount != null">
    AND pay_amount &lt;= #{maxPayAmount}
</if>
<if test="applyStatus != null">
    AND applyStatus = #{applyStatus}
</if>
<if test="companyName != null and companyName != '' ">
    AND companyName LIKE '${companyName}%'
</if>
ORDER BY create_time DESC

这里使用了子查询来获取每个talent_user_id和company_id组合下的最新一条记录,并将其作为a表,然后使用INNER JOIN连接iw_seaservice表来获取完整的海外服务申请记录。注意,子查询中的ORDER BY语句应该按照create_time字段进行排序,且应该在WHERE子句中过滤出row_num=1的记录,以确保只获取最新的一条记录。

SQL查询优化:获取最新海外服务申请记录

原文地址: http://www.cveoy.top/t/topic/oi2Q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录