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

PLSQL中如何在CASE语句中获取上月数据实现指定规则的标记计算

实现方案

逻辑说明

使用Oracle自带的LAG()分析函数获取同员工分组下、按年月排序的上一行value值,再结合CASE语句做判断即可。该方案天然支持跨年的月份衔接,不同员工的计算互不干扰。

直接查询获取结果

SELECT 
    emp,
    year,
    month,
    value,
    CASE 
        WHEN LAG(value, 1) OVER (PARTITION BY emp ORDER BY year, month) IS NULL 
             OR LAG(value, 1) OVER (PARTITION BY emp ORDER BY year, month) = 0 
        THEN 'Y' 
        ELSE 'N' 
    END AS flag
FROM 
    你的实际表名;

请把代码里的你的实际表名替换为业务中对应的表名。

若需要给原表新增flag字段并批量更新

  1. 先新增存储标记的字段
ALTER TABLE 你的实际表名 ADD flag CHAR(1);
  1. 执行批量更新
MERGE INTO 你的实际表名 t
USING (
    SELECT 
        emp,
        year,
        month,
        CASE 
            WHEN LAG(value, 1) OVER (PARTITION BY emp ORDER BY year, month) IS NULL 
                 OR LAG(value, 1) OVER (PARTITION BY emp ORDER BY year, month) = 0 
            THEN 'Y' 
            ELSE 'N' 
        END AS calc_flag
    FROM 你的实际表名
) s
ON (t.emp = s.emp AND t.year = s.year AND t.month = s.month)
WHEN MATCHED THEN UPDATE SET t.flag = s.calc_flag;

输出验证

执行后得到的结果和期望输出完全匹配:

empyearmonthvalueflag
e12020120.5Y
e1202111N
e1202120N
e1202130.25Y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:02