SQL 查询员工最新合同:根据工号和公司代码筛选匹配
SQL 查询员工最新合同:根据工号和公司代码筛选匹配
假设有个合同表 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由大到小依次匹配遇到一条匹配不上的数据,则在集合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)获取b中id最大值,即匹配company_code的最新合同数据。 - 外层查询使用
WHERE条件将a中id等于b中id最大值的记录作为最终结果,即匹配company_code的最新合同数据。
注意:
[work_id]和[company_code]是参数,需要根据实际情况替换成具体的数值。- 该 SQL 语句可以根据
company_code匹配规则筛选出员工的最新合同数据,即使员工有多个不同的company_code的合同记录。
原文地址: http://www.cveoy.top/t/topic/Bz3 著作权归作者所有。请勿转载和采集!