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

PostgreSQL中如何将低于0的engn_hrs_contdwn倒计时列重置为初始值

解决方案

完整实现代码

WITH RECURSIVE flight_ranked AS (
    -- 先对目标飞机的飞行日志按飞行时间排序,生成序号方便递归逐行处理
    SELECT
        f.fleet_id,
        (fl.date || ' ' || fl.tkof_01_time)::timestamp AS flight_time,
        fl.hobs_total,
        ROW_NUMBER() OVER (PARTITION BY f.fleet_id ORDER BY (fl.date || ' ' || fl.tkof_01_time)::timestamp) AS rn
    FROM flt_log fl
    JOIN fleet f ON fl.aircraft_id = f.fleet_id
    WHERE f.fleet_id = 2
),
recursive_calc AS (
    -- 递归起始节点:计算第一条飞行记录的剩余发动机时长
    SELECT
        fleet_id,
        flight_time,
        hobs_total,
        rn,
        1200 - hobs_total AS engn_hrs_contdwn
    FROM flight_ranked
    WHERE rn = 1
    UNION ALL
    -- 递归迭代节点:逐行计算后续所有记录的剩余时长
    SELECT
        fr.fleet_id,
        fr.flight_time,
        fr.hobs_total,
        fr.rn,
        CASE
            -- 剩余时长扣减本次飞行时长后为负,自动加1200模拟更换发动机重置阈值
            WHEN rc.engn_hrs_contdwn - fr.hobs_total < 0 THEN (rc.engn_hrs_contdwn - fr.hobs_total) + 1200
            ELSE rc.engn_hrs_contdwn - fr.hobs_total
        END AS engn_hrs_contdwn
    FROM flight_ranked fr
    JOIN recursive_calc rc ON fr.rn = rc.rn + 1 AND fr.fleet_id = rc.fleet_id
)
-- 输出最终计算结果
SELECT
    fleet_id,
    flight_time AS date,
    hobs_total,
    engn_hrs_contdwn
FROM recursive_calc
ORDER BY flight_time;

适配说明

  • 若需要查询多架飞机的发动机剩余时长,仅需删除WHERE f.fleet_id = 2条件即可,递归逻辑会自动按飞机ID分区独立计算
  • 若发动机更换阈值不是固定值,可将代码中固定的1200替换为关联的阈值字段即可
  • 代码兼容持续新增的飞行日志,新增记录会自动接续历史计算结果迭代,无需修改原有逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:48:03