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

如何使用SQL LAG函数获取Red名称对应的上一条Blue记录的值?

解决方案

可以实现,但单纯使用LAG()函数无法直接满足需求,需要结合条件判断与窗口函数的范围设置来定位目标记录。

具体SQL语句(兼容多数主流数据库)

SELECT 
    ID,
    Name,
    Color,
    Value,
    LAST_VALUE(CASE WHEN Color = 'Blue' THEN Value END) OVER (
        PARTITION BY Name 
        ORDER BY ID 
        ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
        IGNORE NULLS
    ) AS PreviousValue
FROM Data
WHERE Color = 'Red'
ORDER BY ID;

语句说明

  1. 筛选目标记录:通过WHERE Color = 'Red'仅保留颜色为Red的行。
  2. 分组排序:PARTITION BY Name按Name分组,ORDER BY ID确保每个分组内按ID升序排列。
  3. 捕获最近的Blue值:
    • CASE WHEN Color = 'Blue' THEN Value END:仅标记颜色为Blue的Value,其他行返回NULL。
    • LAST_VALUE(...) OVER (...):在当前行之前的所有历史行(ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)中,取最后一个非NULL的标记值(IGNORE NULLS),也就是同Name下最近的Blue记录的Value。
    • 如果当前Red记录之前没有同Name的Blue记录,则返回NULL,完全匹配期望结果。

执行结果

IDNameColorValuePreviousValue
2BRed2NULL
4BRed4NULL
6ARed43

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:25:18