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

如何在SELECT语句中用前一行有效值填充当前行缺失的品牌信息?

解决方案

假设你的表名为cars,且存在一个用于确定行顺序的字段(比如自增主键id,SQL表本身是无序的,必须依赖这类字段保证顺序正确),可以使用以下SQL查询实现需求:

SELECT
    CONCAT(
        -- 获取到当前行为止最近的有效品牌
        MAX(CASE WHEN NOT Car_Type LIKE 'null - %' THEN SUBSTRING_INDEX(Car_Type, ' - ', 1) END)
            OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
        ' - ',
        -- 提取车型部分
        SUBSTRING_INDEX(Car_Type, ' - ', -1)
    ) AS Car_Type
FROM cars;

逻辑说明

  1. 提取有效品牌:通过CASE判断,仅对非null - 开头的行提取品牌部分(用SUBSTRING_INDEX取分隔符-前的内容)。
  2. 填充缺失品牌:使用MAX()窗口函数,按行顺序从第一行到当前行的范围内,取最近的非null品牌值(非null品牌在对应组内唯一,MAX等价于获取最近的有效品牌)。
  3. 拼接结果:将填充后的品牌与车型部分(用SUBSTRING_INDEX取分隔符-后的内容)拼接,得到完整的Car_Type值。

如果你的表中没有id这类顺序字段,需要先添加自增主键,或者确保有其他可确定行顺序的字段(比如创建时间),否则无法保证品牌填充的顺序正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:27:03