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

如何按ID筛选OrderID从NULL变为有效值的首行记录?

问题与解决方案

原始数据

RowNumCreateDTIDOrderID
12022-03-04 12:01:54.00055NULL
22022-03-04 12:05:11.0005512700
12023-01-20 03:44:07.000698NULL
22023-01-24 17:51:35.00069824525
32023-01-25 20:00:43.00069824525
12023-02-13 09:12:01.0001001NULL
22023-02-13 10:27:58.0001001NULL
32023-02-17 22:09:22.000100126831

需求

按ID筛选出OrderID字段从NULL首次变为有效值的那一行记录,预期结果为每个ID最早出现非NULL OrderID的行。

实现方案

方法一:使用窗口函数ROW_NUMBER()

通过窗口函数对每个ID下的非NULL OrderID行按创建时间排序,取每组的第一行:

WITH ranked_data AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY ID 
            ORDER BY CreateDT ASC
        ) AS rn
    FROM your_table
    WHERE OrderID IS NOT NULL
)
SELECT RowNum, CreateDT, ID, OrderID
FROM ranked_data
WHERE rn = 1;

方法二:先聚合取最早时间再关联

先统计每个ID首次出现有效OrderID的时间,再关联原表取出对应行:

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT 
        ID,
        MIN(CreateDT) AS first_valid_dt
    FROM your_table
    WHERE OrderID IS NOT NULL
    GROUP BY ID
) sub ON t.ID = sub.ID AND t.CreateDT = sub.first_valid_dt;

两种方法都能精准筛选出每个ID中OrderID从NULL首次变为有效值的记录,可根据实际数据库环境选择使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:52:44