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

PrestoDB条件行号生成求助:仅匹配指定条件时递增行号

PrestoDB 实现符合条件行递增行号,否则为0

你需要的是仅当column_1匹配%Cuenta%时行号按顺序递增,其余行显示0。原查询的问题在于,ROW_NUMBER() OVER()会对所有行生成连续行号,不受CASE条件控制。可以通过条件累加+窗口函数实现需求,具体修改如下:

WITH FileCTE AS (
    SELECT
        tipo,
        column_1,
        Debe,
        Haber,
        Fecha,
        Numero,
        Saldo,
        Saldo_inicial,
        file_name,
        -- 标记当前行是否符合条件
        CASE WHEN column_1 LIKE '%Cuenta%' THEN 1 ELSE 0 END AS is_match,
        -- 指定排序字段(必须明确,否则行号顺序不确定,可根据你的业务调整)
        ROW_NUMBER() OVER (ORDER BY Fecha, Numero) AS row_order
    FROM "e90df27ca05f47da96d0b3966744739b"."d1c533d450b2490f945966ae78b5f830"
)
SELECT
    tipo,
    -- 仅当前行符合条件时,显示累计的匹配行数,否则为0
    CASE 
        WHEN is_match = 1 
        THEN SUM(is_match) OVER (ORDER BY row_order) 
        ELSE 0 
    END AS row,
    column_1,
    Debe,
    Haber,
    Fecha AS Date,
    Numero AS number,
    Saldo,
    Saldo_inicial,
    file_name
FROM FileCTE

关键逻辑说明:

  1. 标记匹配行:用is_match字段标记当前行是否满足column_1 LIKE '%Cuenta%',符合为1,否则为0。
  2. 明确排序顺序:通过row_order指定行的排序依据(这里用Fecha和Numero,你可以根据实际业务调整为需要的字段),保证行号的顺序稳定。
  3. 条件累计行号:使用SUM(is_match) OVER (ORDER BY row_order)累计所有之前(包括当前)的匹配行数,再通过外层CASE判断,仅在当前行是匹配行时显示累计值,非匹配行显示0。

如果不需要单独的row_order字段,也可以直接把排序字段放到SUM的窗口子句中简化查询:

SELECT
    tipo,
    CASE 
        WHEN column_1 LIKE '%Cuenta%' 
        THEN SUM(CASE WHEN column_1 LIKE '%Cuenta%' THEN 1 ELSE 0 END) OVER (ORDER BY Fecha, Numero) 
        ELSE 0 
    END AS row,
    column_1,
    Debe,
    Haber,
    Fecha AS Date,
    Numero AS number,
    Saldo,
    Saldo_inicial,
    file_name
FROM "e90df27ca05f47da96d0b3966744739b"."d1c533d450b2490f945966ae78b5f830"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:53:14