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

SQL中使用Partition和Lag函数标记数值下降的前一行

修正SQL实现金额下降时标记前一行的方法

原查询使用lag()函数对比当前行与前一行的金额,导致标记出现在金额下降的当前行。要将标记转移到下降行的前一行,需要改用lead()函数提前预判下一行的金额变化和日期连续性:

修正后的SQL语句:

select 
    account, 
    amount,
    case 
        when amount > lead(amount) over (partition by account order by start_date) 
             and lead(start_date) over (partition by account order by start_date) = end_date + 1
        then 1 
        else 0 
    end as flag, 
    start_date, 
    end_date
from table

逻辑说明

  • lead(amount) over (...):获取当前行的下一行金额,用来判断当前行金额是否比下一行高(即下一行是下降行)
  • lead(start_date) over (...) = end_date + 1:验证下一行的起始日期是否与当前行的结束日期连续,保留原逻辑的日期校验规则
  • 满足条件时,当前行(即下降行的前一行)的flag设为1,否则为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:59:51