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

多订单从开始到完成耗时计算的SQL查询编写需求

计算订单从Start到Complete的耗时

嘿,我来帮你搞定这个订单耗时计算的问题!从你的表结构和示例数据来看,每个订单的Start和Complete操作是分开成两行记录的,我们需要把同一个订单的这两个时间关联起来,再计算差值。

方法一:自连接(最简单直接的方式)

如果每个订单只会有一条Start和一条Complete记录,用自连接就能轻松搞定:

SELECT 
    o_start.订单号,
    -- 这里用分钟计算耗时,你可以换成HOUR/SECOND等单位
    DATEDIFF(MINUTE, o_start.日期时间, o_complete.日期时间) AS 耗时_分钟
FROM 
    你的表名 o_start
INNER JOIN 
    你的表名 o_complete 
    ON o_start.订单号 = o_complete.订单号
WHERE 
    o_start.操作类型 = 'Start'
    AND o_complete.操作类型 = 'Complete'

方法二:窗口函数(处理多操作记录的情况)

如果某些订单可能存在多条Start/Complete记录(比如重复操作),可以用窗口函数筛选出每个订单的最早Start时间和最早Complete时间:

WITH 订单操作明细 AS (
    SELECT 
        订单号,
        操作类型,
        日期时间,
        -- 按订单和操作类型分组,给记录排序
        ROW_NUMBER() OVER(
            PARTITION BY 订单号, 操作类型 
            ORDER BY 日期时间 ASC
        ) AS 操作序号
    FROM 你的表名
)
SELECT 
    s.订单号,
    DATEDIFF(MINUTE, s.日期时间, c.日期时间) AS 耗时_分钟
FROM 订单操作明细 s
INNER JOIN 订单操作明细 c 
    ON s.订单号 = c.订单号
WHERE 
    s.操作类型 = 'Start' AND s.操作序号 = 1  -- 取该订单第一次Start的时间
    AND c.操作类型 = 'Complete' AND c.操作序号 = 1  -- 取该订单第一次Complete的时间

关于你尝试的变量写法

你之前用DECLARE变量+临时表的思路,更适合处理单条订单的场景。要批量处理多订单的话,上面的集合操作会更高效、简洁,不需要循环或者逐个赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:15:03