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

Hive中使用LAG()窗口函数过滤数据时如何保留首行记录

问题解决方法

原因说明

分组内第一行记录通过lag()窗口函数获取相邻上一行的Event值时,返回结果为NULL,在SQL中NULL与任意值做不等比较的结果都为false,因此原有查询的过滤条件会直接把第一行排除,导致结果缺失。

调整方案

仅需修改外层查询的WHERE过滤条件,增加Prev_Event IS NULL的判断即可,修改后的完整SQL如下:

WITH mma AS
(
select VIN, 
       Mode, 
       Status,
       case when lower(Status) like '%authorized%' then 'Authorized' else 'Deauthorized' end Event,
       Start, 
       End 
  from ModemAuth 
 where VIN = 'ABC123456789'
 order by Start
 )

select mma2.*
from (select mma.*,
             lag(event) over (partition by VIN order by Start) as Prev_Event
        from mma
     ) mma2
where Prev_Event <> Event OR Prev_Event IS NULL

效果验证

修改后查询会同时保留分组第一行记录、以及所有Event值和上一行发生变化的记录,输出结果和你给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:48:03