根据上面的条件,可以写出以下 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 语句中的参数 ? 需要替换为实际的值。

SQL 查询优化:根据员工工号和公司代码获取最新合同信息

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

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