SQL查询:按岗位取最新行并统计符合资格的累计总天数
实现方案
核心思路
你只需要把已提取到的各岗位最新记录,和按岗位分组统计的符合资格总天数做关联即可,逻辑分两步:
- 按
Job分组,统计所有Eligible = 'Y'的记录的总天数,单条记录的时段天数计算要包含首尾日期,所以日期差结果要+1 - 将你已经用lead函数提取到的各岗位最新记录,和上面统计出的各岗位总天数按
Job字段关联,输出对应字段即可
通用SQL实现示例
WITH -- 如果你已经拿到了各岗位最新记录,可以省略下面的latest_records CTE,直接用你已有的结果集关联即可 latest_records AS ( -- 取各岗位最新记录的实现,你也可以替换为自己已有的lead函数实现逻辑 SELECT StDt, EdDt, Eligible, Job FROM ( SELECT StDt, EdDt, Eligible, Job, ROW_NUMBER() OVER(PARTITION BY Job ORDER BY StDt DESC) AS rn FROM emp_job_records ) t WHERE rn = 1 ), job_total AS ( -- 统计各岗位所有符合资格记录的总天数 SELECT Job, SUM(DATEDIFF(day, StDt, EdDt) + 1) AS TotalDays -- 不同数据库日期差语法可自行调整:Oracle直接写EdDt - StDt + 1,MySQL写DATEDIFF(EdDt, StDt) +1 FROM emp_job_records WHERE Eligible = 'Y' GROUP BY Job ) SELECT l.*, t.TotalDays FROM latest_records l INNER JOIN job_total t ON l.Job = t.Job
逻辑验证
用你提供的示例数据测试:
- J1岗位的两条符合资格记录:1月时段共31天、7月时段共31天,总天数31+31=62,和预期结果一致
- J2岗位的一条符合资格记录:8月时段共31天,和预期结果一致
内容的提问来源于stack exchange,提问作者Alka Ojha
相关产品推荐
相关产品推荐

