SQL 查询优化:获取最新申请数据并去除重复
可以使用 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,筛选出最新申请的数据。
解释:
-
子查询
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进行分组。
-
主查询
T:SELECT DISTINCT T.seaservice_id, T.*:从T表中获取所有字段,并使用DISTINCT去重。FROM ( ... ) T:使用子查询T来获取所有申请数据。
-
INNER JOIN连接:INNER JOIN A ON T.seaservice_id = A.seaservice_id AND T.create_time = A.max_create_time:通过seaservice_id和create_time连接到子查询A,确保筛选出每个seaservice_id对应的最新申请数据。
-
过滤条件:
- 使用
minPayAmount,maxPayAmount,applyStatus和companyName等条件过滤数据。
- 使用
-
排序:
ORDER BY create_time DESC:按照create_time降序排列数据。
通过以上代码,你可以轻松获取最新申请数据并去除重复数据。
原文地址: http://www.cveoy.top/t/topic/oiZ2 著作权归作者所有。请勿转载和采集!