可以使用 DISTINCT 关键字来去重,同时使用子查询和 MAX 函数来获取每个 seaservice_id 对应的最新申请数据,如下所示:

SELECT DISTINCT T.seaservice_id, T.*
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 iw_seaservice_apply a 
    LEFT JOIN iw_seaservice b ON a.seaservice_id = b.id 
    LEFT JOIN iw_company c ON b.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 b.talent_user_id = e.id
) T
INNER JOIN (
    SELECT seaservice_id, MAX(create_time) AS max_create_time
    FROM iw_seaservice_apply
    GROUP BY seaservice_id
) A ON T.seaservice_id = A.seaservice_id AND T.create_time = A.max_create_time
${ew.customSqlSegment}
<if test="minPayAmount != null">
    AND pay_amount >= #{minPayAmount}
</if>
<if test="maxPayAmount != null">
    AND pay_amount <= #{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

这段代码使用了子查询 A 来获取每个 seaservice_id 对应的最新 create_time,然后通过 INNER JOIN 连接到主查询 T,筛选出最新申请的数据。

解释:

  1. 子查询 A:

    • SELECT seaservice_id, MAX(create_time) AS max_create_time:获取每个 seaservice_id 对应的最新 create_time
    • FROM iw_seaservice_apply:从 iw_seaservice_apply 表中获取数据。
    • GROUP BY seaservice_id:按 seaservice_id 进行分组。
  2. 主查询 T:

    • SELECT DISTINCT T.seaservice_id, T.*:从 T 表中获取所有字段,并使用 DISTINCT 去重。
    • FROM ( ... ) T:使用子查询 T 来获取所有申请数据。
  3. INNER JOIN 连接:

    • INNER JOIN A ON T.seaservice_id = A.seaservice_id AND T.create_time = A.max_create_time:通过 seaservice_idcreate_time 连接到子查询 A,确保筛选出每个 seaservice_id 对应的最新申请数据。
  4. 过滤条件:

    • 使用 minPayAmount, maxPayAmount, applyStatuscompanyName 等条件过滤数据。
  5. 排序:

    • ORDER BY create_time DESC:按照 create_time 降序排列数据。

通过以上代码,你可以轻松获取最新申请数据并去除重复数据。

SQL 查询优化:获取最新申请数据并去除重复

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

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