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

现在我有两个已知的参数:

  1. work_id
  2. company_code

首先根据 work_id 查出所有数据并且根据 id 由小到大排序得到数据集 a。 然后将已知的 company_code 与数据集 a 的数据根据 id 由大到小依次匹配。 如果数据集 a 的所有数据都能匹配上,则取出 id 最小的一条数据。 如果数据集 a 根据 id 由大到小依次匹配遇到一条匹配不上的数据,那么在集合 aid 等于或者小于这条数据 id 的数据都舍去, 取剩余数据中 id 最小的一条数据。

请写一条 SQL 语句满足上面的条件。

根据题目描述,可以使用以下 SQL 语句来满足条件:

SELECT * FROM (
    SELECT *
    FROM hrbase_mark_contract
    WHERE work_id = :work_id
    ORDER BY id ASC
) AS a
WHERE company_code = :company_code
ORDER BY id DESC
LIMIT 1

其中,:work_id:company_code 是已知的参数值,可以根据实际情况进行替换。 这条 SQL 语句首先根据 work_id 筛选出所有数据,并按 id 由小到大排序得到数据集 a。然后根据给定的 company_code 与数据集 a 中的数据进行匹配,按 id 由大到小排序。如果能匹配上所有数据,则取出 id 最小的一条数据;如果遇到一条匹配不上的数据,则舍去 id 等于或小于该数据 id 的数据,并取剩余数据中 id 最小的一条数据。最后使用 LIMIT 1 来限制结果只返回一条数据。

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

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

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