SQL 查询员工最新合同:根据工号和公司代码筛选匹配

假设有个合同表 hrbase_mark_contract,包含员工工号字段 work_id,公司代码字段 company_code,合同订立开始时间 contract_sdate,以及自增主键 id。一个员工可以有多条合同数据,这些合同数据的 company_code 可能不一样。

现在已知两个参数:1. work_id,2. company_code。需要根据以下规则查询员工最新合同数据:

  1. 首先根据 work_id 查出所有数据并按 id 由小到大排序,得到数据集 a
  2. 将已知的 company_code 与数据集 a 的数据根据 id 由大到小依次匹配。
  3. 如果数据集 a 的所有数据都能匹配上,则取出 id 最小的一条数据。
  4. 如果数据集 a 根据 id 由大到小依次匹配遇到一条匹配不上的数据,则在集合 a 中包括这条匹配不上的数据以及比这条数据的 id 小的数据都舍去,取剩余数据中 id 最小的一条数据。

以下 SQL 语句可以满足上述条件:

SELECT * 
FROM (
  SELECT * 
  FROM hrbase_mark_contract 
  WHERE work_id = '[work_id]' 
  ORDER BY id ASC 
) AS a 
WHERE id = (
  SELECT MAX(id) 
  FROM (
    SELECT * 
    FROM hrbase_mark_contract 
    WHERE work_id = '[work_id]' 
    ORDER BY id DESC 
  ) AS b 
  WHERE company_code = '[company_code]'
)

解释:

  • 首先使用子查询 a 根据 work_id 查询出所有数据并按 id 升序排序。
  • 然后使用子查询 b 根据 work_id 查询出所有数据并按 id 降序排序,并使用 WHERE 条件筛选出 company_code 匹配的数据。
  • 最后使用 MAX(id) 获取 bid 最大值,即匹配 company_code 的最新合同数据。
  • 外层查询使用 WHERE 条件将 aid 等于 bid 最大值的记录作为最终结果,即匹配 company_code 的最新合同数据。

注意:

  • [work_id][company_code] 是参数,需要根据实际情况替换成具体的数值。
  • 该 SQL 语句可以根据 company_code 匹配规则筛选出员工的最新合同数据,即使员工有多个不同的 company_code 的合同记录。
SQL 查询员工最新合同:根据工号和公司代码筛选匹配

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

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