优化SQL语句:获取指定员工最后一条记录
优化SQL语句:获取指定员工最后一条记录
本文将分析两个SQL语句的作用,并提供优化后的SQL语句,用于从hrbase_mark_contract表中获取指定员工最后一条记录。
原始SQL语句:
SELECT *
FROM (
SELECT *
FROM hrbase_mark_contract
WHERE work_id = '员工工号' -- 替换为实际的员工工号
ORDER BY id ASC
) AS a
WHERE id >= (
SELECT MAX(id)
FROM hrbase_mark_contract
WHERE work_id = '员工工号' -- 替换为实际的员工工号
AND company_code = '公司代码' -- 替换为实际的公司代码
)
ORDER BY id ASC
LIMIT 1;
SELECT *
FROM (
SELECT *
FROM hrbase_mark_contract
WHERE work_id = 'xxx' -- 员工工号
ORDER BY id ASC
) AS a
WHERE (
SELECT COUNT(*)
FROM hrbase_mark_contract
WHERE work_id = a.work_id
AND company_code = 'xxx' -- 公司代码
AND id >= a.id
) = (
SELECT COUNT(*)
FROM hrbase_mark_contract
WHERE work_id = a.work_id
AND id >= a.id
)
ORDER BY id DESC
LIMIT 1;
SQL语句作用:
- 该SQL语句从
hrbase_mark_contract表中获取指定员工工号的记录,并按照id升序排序,然后返回最后一条记录。 - 该SQL语句从
hrbase_mark_contract表中获取指定员工工号的记录,并按照id升序排序,然后返回满足条件的最后一条记录。
优化后的SQL语句:
SELECT *
FROM hrbase_mark_contract
WHERE work_id = '员工工号'
AND company_code = '公司代码'
ORDER BY id DESC
LIMIT 1;
SELECT *
FROM hrbase_mark_contract AS a
WHERE work_id = '员工工号'
AND company_code = '公司代码'
AND NOT EXISTS (
SELECT *
FROM hrbase_mark_contract AS b
WHERE b.work_id = a.work_id
AND b.company_code = a.company_code
AND b.id > a.id
)
ORDER BY id DESC
LIMIT 1;
优化说明:
以上两个优化后的SQL语句都是根据具体情况来设计的,可能会更适合你的需求和数据结构。
- 优化1:直接根据
work_id和company_code条件筛选数据,然后按照id降序排序,最后取第一条记录。 - 优化2:使用
NOT EXISTS子查询来判断当前记录是否是该员工在该公司的最后一条记录,并筛选出最后一条记录。
总结:
本文介绍了两种获取指定员工最后一条记录的SQL语句,并提供了优化后的SQL语句。建议根据实际情况选择合适的SQL语句,并进行测试验证。
希望本文对你有所帮助!
原文地址: https://www.cveoy.top/t/topic/B70 著作权归作者所有。请勿转载和采集!