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

TSQL如何统计出发但未抵达(行程取消)的车辆总数量?

SQL Server TSQL 行程取消车辆统计解决方案

核心判定逻辑:同一事件(eventnumber)下的同一车辆(vehicle)存在onway(已出发)状态记录,且无对应arrived(已抵达)状态记录,即判定为行程取消。
以下为两种可直接落地的实现方案(假设业务表名为trip_events,可替换为实际表名):

方案1:NOT EXISTS 实现(性能优先推荐)

逻辑直观,搭配eventnumber + vehicle + status联合索引时查询效率最优:

SELECT COUNT(DISTINCT vehicle) AS canceled_vehicle_count
FROM trip_events t_onway
WHERE t_onway.status = 'onway'
AND NOT EXISTS (
    SELECT 1
    FROM trip_events t_arrived
    WHERE t_arrived.eventnumber = t_onway.eventnumber
      AND t_arrived.vehicle = t_onway.vehicle
      AND t_arrived.status = 'arrived'
)

针对你提供的示例数据,该查询返回结果为2,完全匹配预期输出。

方案2:GROUP BY + HAVING 实现(适合需要明细的场景)

如果需要同时查询所有符合条件的事件、车辆明细,可使用该方案:

-- 查看行程取消的车辆明细
SELECT eventnumber, vehicle
FROM trip_events
GROUP BY eventnumber, vehicle
HAVING 
  -- 存在出发记录
  SUM(CASE WHEN status = 'onway' THEN 1 ELSE 0 END) > 0
  -- 无抵达记录
  AND SUM(CASE WHEN status = 'arrived' THEN 1 ELSE 0 END) = 0

-- 直接统计取消车辆总数
SELECT COUNT(*) AS canceled_vehicle_count
FROM (
    SELECT 1
    FROM trip_events
    GROUP BY eventnumber, vehicle
    HAVING SUM(CASE WHEN status = 'onway' THEN 1 ELSE 0 END) > 0
       AND SUM(CASE WHEN status = 'arrived' THEN 1 ELSE 0 END) = 0
) t

注意事项

如果业务场景存在同一车辆同一事件多次出发/抵达的情况,可结合cdts时间戳字段增加时间维度的判定逻辑,避免统计误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:15:08