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

Snowflake需求:根据PO_NUMBER=0的情况确定返回的行号

供应商首单查询优化方案

原查询存在两处关键问题:一是窗口函数别名ROWNUM与Oracle内置伪列冲突,会引发逻辑错误;二是未满足**忽略PO_NUMBER=0记录(仅当为供应商唯一记录时保留)**的业务规则。以下是优化方案:

优化SQL

WITH supplier_delivery_stats AS (
    SELECT 
        dh.*,
        ROW_NUMBER() OVER (PARTITION BY SUPPLIER_CODE 
                           ORDER BY DELIVERY_DATE, PO_NUMBER) AS rec_rank,
        COUNT(*) OVER (PARTITION BY SUPPLIER_CODE) AS total_records,
        SUM(CASE WHEN PO_NUMBER != 0 THEN 1 ELSE 0 END) OVER (PARTITION BY SUPPLIER_CODE) AS valid_po_count
    FROM DELIVERY_HISTORY dh
)
SELECT 
    SUPPLIER_CODE, 
    SUPPLIER_NAME,
    DELIVERY_LOCATION,
    RECEIVED_BY,
    ORDER_DATE,
    PO_NUMBER,
    DELIVERY_DATE
FROM supplier_delivery_stats
WHERE 
    -- 规则1:供应商仅有1条记录,或无有效PO(全为0),取排序第1条
    (total_records = 1 OR (valid_po_count = 0 AND rec_rank = 1))
    -- 规则2:多条记录且存在有效PO,取最早的有效PO记录
    OR (total_records > 1 AND valid_po_count > 0 
        AND rec_rank = (SELECT MIN(rec_rank) 
                        FROM supplier_delivery_stats sds
                        WHERE sds.SUPPLIER_CODE = supplier_delivery_stats.SUPPLIER_CODE 
                          AND sds.PO_NUMBER != 0))

核心逻辑说明

  1. 统计指标计算:通过窗口函数一次性计算每个供应商的总记录数、有效PO(PO_NUMBER≠0)数量,以及每条记录在供应商内的排序序号;
  2. 规则匹配:
    • 当供应商只有一条记录,或所有记录都是PO_NUMBER=0时,直接取排序后的第一条;
    • 当供应商有多条记录且存在有效PO时,筛选出该供应商下序号最小的有效PO记录,实现“忽略PO_NUMBER=0记录”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:42:32