SQL 查询优化:根据员工工号和公司代码获取最新合同信息
根据上面的条件,可以写出以下 SQL 语句:
-- 第一种情况,根据 work_id 只查出一条数据时,取出这条数据
SELECT * FROM hrbase_mark_contract
WHERE work_id = ? LIMIT 1;
-- 第二种情况,根据 work_id 查出多条数据,且 company_code 都相同,取 id 最小的一条数据
SELECT * FROM hrbase_mark_contract
WHERE work_id = ? AND company_code = ?
ORDER BY id ASC LIMIT 1;
-- 第三种情况,根据 work_id 查出多条数据,且 company_code 不完全相同,以传入的 company_code 为准
-- 首先筛选出 company_code 相同的数据集合 b
SELECT * FROM hrbase_mark_contract
WHERE work_id = ? AND company_code = ?
ORDER BY id ASC;
-- 然后查找集合 b 中与 idmax 最近且比 idmax 大的一条数据
SELECT * FROM (
SELECT * FROM hrbase_mark_contract
WHERE work_id = ? AND company_code = ?
AND id > (SELECT MAX(id) FROM hrbase_mark_contract WHERE work_id = ? AND company_code = ?)
ORDER BY id ASC
) AS subquery
LIMIT 1;
注意:上述 SQL 语句中的参数 ? 需要替换为实际的值。
原文地址: https://www.cveoy.top/t/topic/Cp3 著作权归作者所有。请勿转载和采集!