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

SQL如何获取其他行的最小值填充至Station行的空值字段?

问题原因

你现有的写法错误在于窗口函数的分区规则包含了stop_type和vehicle_stop_number,这会导致Station类型和Dropoff类型的行被划分到不同分区,无法跨类型获取到Dropoff对应的时间值。

正确实现SQL

SELECT 
    *
    ,CASE 
        WHEN stop_type = 'Station' AND enter_time IS NULL THEN
            -- 判断是否存在Dropoff的enter_time为null,有则返回null
            CASE WHEN has_null_dropoff > 0 THEN NULL ELSE min_dropoff_time END
        ELSE enter_time 
     END AS enter_time_actuals
FROM (
    SELECT 
        *
        -- 计算同组所有Dropoff的最小enter_time,非Dropoff行也能拿到这个值
        ,MIN(CASE WHEN stop_type = 'Dropoff' THEN enter_time END) 
            OVER(PARTITION BY date, route_id, employee_id) AS min_dropoff_time
        -- 统计同组内Dropoff的enter_time为null的数量,用于边界判断
        ,SUM(CASE WHEN stop_type = 'Dropoff' AND enter_time IS NULL THEN 1 ELSE 0 END)
            OVER(PARTITION BY date, route_id, employee_id) AS has_null_dropoff
    FROM stops
) t

逻辑说明

  • 分区仅保留date、route_id、employee_id三个公共维度,确保同一条路线、同一天、同一个员工的所有站点行归属同一个分区
  • 条件聚合仅统计stop_type='Dropoff'的行的最小enter_time,分区内所有行都能访问到这个统计值
  • 额外统计同分区内Dropoff类型的enter_time为空的行数,只要行数大于0就给Station行赋值空,完全符合边界处理规则
  • 非Station类型的行直接保留原始的enter_time值,不需要修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:36:03