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

如何筛选仅最新投递的超时包裹数据?SQL查询优化求助

优化SQL查询:仅返回包裹最新投递记录超时的结果

问题分析

原查询会返回所有曾出现超时的包裹记录,无法过滤掉历史超时但最新记录正常的情况。我们需要只筛选每个包裹(按PackageName+PostName组合标识)的最新投递记录(max(DatePosted))超时的条目。

优化后的查询语句

WITH LatestDelivery AS (
    -- 先获取每个PackageName+PostName的最新投递时间
    SELECT 
        PackageName,
        PostName,
        MAX(DatePosted) AS LatestPostDate
    FROM DeliveryDetails
    GROUP BY PackageName, PostName
)
SELECT    
    'Package Delayed' AS AlertType,    
    dd.PackageName,  
    dd.PostName,  
    DATEDIFF(ss, dd.DatePosted, ISNULL(dd.DateDelivered, GETDATE())) AS PackageDelay,  
    @@SERVERNAME AS SentFrom
FROM DeliveryDetails AS dd
-- 关联最新投递记录,拿到对应的数据行
INNER JOIN LatestDelivery AS ld 
    ON dd.PackageName = ld.PackageName 
    AND dd.PostName = ld.PostName 
    AND dd.DatePosted = ld.LatestPostDate
-- 关联告警配置表,修正原查询中无效的join条件
INNER JOIN dbo.AlertTable AS at WITH (NOLOCK) 
    ON dd.PackageName = at.PackageName  
    AND DATEDIFF(ss, dd.DatePosted, ISNULL(dd.DateDelivered, GETDATE())) >= at.DeliveryThreshold  
WHERE 
    at.NextAlert < GETDATE()  
    AND at.Active = 1

关键优化点

  • 用CTELatestDelivery锁定每个包裹的最新投递时间,确保后续只处理最新记录
  • 修正原查询中无效的关联条件(原dd.PackageName = dd.PackageName属于无意义自关联,改为关联AlertTable对应字段)
  • 直接计算最新记录的超时时长,无需MAX()聚合(已定位到单条最新记录)
  • 仅保留最新投递记录超时的包裹,彻底排除历史超时记录干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:37:11