SQL 查询:根据员工工号和公司代码获取最新匹配合同
已知有个合同表 hrbase_mark_contract,里面有员工工号字段 work_id,有公司代码字段 company_code,有合同订立开始时间 contract_sdate,有自增主键 id,一个员工可以有多条合同数据,这些合同数据的 company_code 可能不一样。
现在我有两个已知的参数:
work_id,company_code,
首先根据 work_id 查出所有数据并且根据 id 由小到大排序得到数据集 a。
然后将已知的 company_code 与数据集 a 的数据根据 id 由大到小依次匹配。
如果数据集 a 的所有数据都能匹配上,则取出 id 最小的一条数据。
如果数据集 a 根据 id 由大到小依次匹配遇到一条匹配不上的数据,那么在集合 a 中 id 等于或者小于这条数据 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 来限制结果只返回一条数据。
原文地址: https://www.cveoy.top/t/topic/BzD 著作权归作者所有。请勿转载和采集!