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

Oracle中实现Avg Delay表显示Schedule表无延误站点的0值

解决Avg Delay Departure表中缺失Schedule表站点并显示0值的问题

看起来你需要让Avg Delay Departure表包含Schedule表中所有站点,哪怕该站点没有延误记录(比如BMU),并将这些站点的平均延误设为0。这里有个可行的解决方案:

首先,原查询的问题在于它只返回了满足延误时间超过15分钟且有实际起飞记录的站点,而Schedule表中的BMU因为没有符合条件的延误数据,所以没有出现在结果集中。要实现需求,我们需要将Schedule表作为主表,通过左连接关联原查询的结果,再用NVL函数将缺失的平均延误值替换为0。

修改后的查询语句

SELECT 
    s.STATION,
    NVL(d.DEPAVERAGE, 0) AS "Avg Delay Departure"
FROM 
    Schedule s
LEFT JOIN (
    -- 原查询作为子查询,保留原有延误数据计算逻辑
    SELECT 
        DEPAIRPORT AS STATION,
        TO_NUMBER(TO_CHAR(TRUNC(SYSDATE) + AVG(CAST(ACTUAL_BLOCKOFF_LC AS DATE) - CAST(SCHEDULED_DEPDT_LC AS DATE)), 'sssss'))/60 AS DEPAVERAGE
    FROM 
        DBODSXML4OPS.XML4OPS
    WHERE 
        ACTUAL_BLOCKOFF_LC IS NOT NULL 
        AND SERVICETYPE IN ('J','G') 
        AND (ACTUAL_BLOCKOFF_LC - SCHEDULED_DEPDT_LC)*24*60 > '+000000015 00:00:00.000000000' 
        AND STATUS IN ('Scheduled') 
        AND TO_CHAR(SCHEDULED_DEPDT_LC, 'yyyy-mm-dd') BETWEEN '2018-04-14' AND '2018-05-14'
    GROUP BY 
        DEPAIRPORT
) d ON s.STATION = d.STATION
ORDER BY 
    s.STATION ASC;

关键逻辑说明

  • 左连接(LEFT JOIN):确保Schedule表中的所有站点都会被保留,即使子查询中没有对应的数据(比如BMU)。
  • NVL函数:当子查询返回的DEPAVERAGE为NULL时,自动替换为0,完美满足无延误站点显示0值的需求。
  • 子查询完整保留了原有的业务筛选逻辑,不会影响已有站点的平均延误计算结果。

预期结果

执行该查询后,Avg Delay Departure表会包含Schedule表中全部11个站点,其中BMU的"Avg Delay Departure"字段值为0,其余站点的数值与原查询结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:13:09