优化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语句作用:

  1. 该SQL语句从hrbase_mark_contract表中获取指定员工工号的记录,并按照id升序排序,然后返回最后一条记录。
  2. 该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_idcompany_code条件筛选数据,然后按照id降序排序,最后取第一条记录。
  • 优化2:使用NOT EXISTS子查询来判断当前记录是否是该员工在该公司的最后一条记录,并筛选出最后一条记录。

总结:

本文介绍了两种获取指定员工最后一条记录的SQL语句,并提供了优化后的SQL语句。建议根据实际情况选择合适的SQL语句,并进行测试验证。

希望本文对你有所帮助!

优化SQL语句:获取指定员工最后一条记录

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

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