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

SQL Server中如何按指定条件获取符合要求的下一行ToLoc值?

解决SQL Server中生成目标列的问题

需求回顾

  • 若Curr等于Dest,目标列直接显示ToLoc的值;
  • 若Curr不等于Dest,显示同一Box和Step分区内、按EntryTime排序后下一个满足Curr=Dest条件的ToLoc值。

为什么LAST_VALUE不适用

你之前尝试的LAST_VALUE函数是取窗口分区内排序后的最后一条记录的值,但它无法筛选出"下一个满足Curr=Dest"的特定记录,而是会返回分区内所有行的最后一个ToLoc,不符合需求中的"下一个符合条件"的逻辑。

解决方案

可以使用OUTER APPLY关联同一Box+Step分组中,当前行EntryTime之后第一个满足Curr=Dest的记录,结合条件判断实现需求:

SELECT 
    t.Box,
    t.Step,
    t.Curr,
    t.Dest,
    t.FromLoc,
    t.ToLoc,
    t.EntryTime,
    CASE 
        WHEN t.Curr = t.Dest THEN t.ToLoc
        ELSE next_valid.ToLoc
    END AS Desired
FROM @t t
OUTER APPLY (
    SELECT TOP 1 ToLoc
    FROM @t 
    WHERE 
        Box = t.Box 
        AND Step = t.Step 
        AND EntryTime > t.EntryTime 
        AND Curr = Dest
    ORDER BY EntryTime ASC
) next_valid
ORDER BY t.Box, t.Step, t.EntryTime;

方案说明

  1. OUTER APPLY子查询:在同一Box和Step分组中,筛选出当前行之后(EntryTime > t.EntryTime)且满足Curr=Dest的记录,按EntryTime升序取第一条,即为需要的"下一个符合条件"的ToLoc;
  2. CASE条件判断:直接处理Curr=Dest的场景,否则使用OUTER APPLY返回的ToLoc值;
  3. 保留原数据的排序逻辑,确保结果顺序与测试数据一致。

测试验证

执行上述SQL后,输出结果中的Desired列将完全匹配你提供的预期值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:23:26