SQL LEAD函数查询本年单条数据时如何获取上年数据
问题分析
你遇到的核心问题是LEAD函数的工作逻辑限制:LEAD只能提取当前分区内位于当前行之后的指定偏移行的数据。当2025年该员工只有一条记录时,分区里没有后续行可以读取,所以TransferfromCostCenter必然返回null——调整偏移量或加CASE表达式没用,因为根本没有可获取的目标行。
解决方案
直接用COALESCE(不同数据库有等价函数:MySQL用IFNULL,SQL Server用ISNULL)把LEAD返回的null替换成你需要的US074357。另外注意原SQL里insert_date,后面多了个逗号,会导致语法错误,需要去掉。
修改后的SQL:
select COST_CENTER, COALESCE( lead(COST_CENTER) over ( partition by CENTRAL_ID_CPID, EMP_STATUS order by INSERT_DATE desc ), 'US074357' ) TransferfromCostCenter, insert_date from dim_employee where employee_id = '50056920' and to_char(INSERT_DATE, 'yyyy') = '2025' order by insert_date desc
如果US074357其实是该员工当前记录的成本中心值(而非固定字符串),可以把替换逻辑改成COALESCE(LEAD(...), COST_CENTER),这样单条记录时就显示自身的成本中心。
内容的提问来源于stack exchange,提问作者Praveen S
相关产品推荐
相关产品推荐

