You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用T-SQL获取每位员工指定月份的最后30条评估记录?

解决方案:获取每位员工当月最多30条最新评估记录

没问题,这个需求用T-SQL的窗口函数就能轻松实现!我帮你整理了具体的实现方案:

核心实现代码

WITH RankedEvaluations AS (
    SELECT 
        Date, 
        Month, 
        Team, 
        Employee_ID, 
        Evaluation_Score, 
        Evaluation_Case_Number,
        -- 按员工分组,每组内按日期倒序给记录编号(最新的排第1)
        ROW_NUMBER() OVER (PARTITION BY Employee_ID ORDER BY Date DESC) AS RecordRank
    FROM X 
    WHERE Month = @month
)
SELECT 
    Date, 
    Month, 
    Team, 
    Employee_ID, 
    Evaluation_Score, 
    Evaluation_Case_Number
FROM RankedEvaluations
WHERE RecordRank <= 30
-- 最终按员工ID+日期倒序展示,方便查看每个员工的最新记录
ORDER BY Employee_ID, Date DESC;

代码逻辑说明

  • PARTITION BY Employee_ID:把整个数据集按员工ID拆分,每个员工的记录单独形成一个分组,确保排名是针对每个员工独立计算的
  • ORDER BY Date DESC:在每个员工的分组内,按评估日期从新到旧排序,最新的记录会被标记为RecordRank = 1
  • 外层查询筛选RecordRank <= 30:自动保留每个员工最多30条最新记录,如果当月该员工的评估记录不足30条,所有记录都会被完整返回

可选优化:处理同一天的多条记录

如果存在同一员工在同一天有多条评估记录的场景,你可以给排序条件加上Evaluation_Case_Number DESC,确保同一天的记录按案例编号从大到小排序(避免系统随机编号):

ROW_NUMBER() OVER (PARTITION BY Employee_ID ORDER BY Date DESC, Evaluation_Case_Number DESC) AS RecordRank

内容的提问来源于stack exchange,提问作者NewbieSQL_Germany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:52:40