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

TSQL如何基于时间字段获取指定FILOID的前序及后续关联记录

SQL查询实现方案

实现逻辑

  • 基于原有查询逻辑,给所有符合员工、客户条件的记录按StartTransactionTimeUTC升序分配唯一行号
  • 定位到传入的目标FILOID对应的行号,将筛选条件设为行号 >= 目标行号-1,即可同时拿到目标的前一条、目标本身及所有后续记录
  • 保留原有NextFilo、LastFilo的取值规则不变

完整可执行代码

-- 声明传入参数,示例目标FILOID为6,可按需修改
DECLARE @TargetFILOID INT = 6;
DECLARE @TargetEmployeeID INT = 15049;
DECLARE @TargetClientID INT = 306;

WITH AllFILORecords AS (
    SELECT 
        fs.FILOID CurrentFilo,
        ISNULL(LEAD(af.FILOID) OVER (ORDER BY StartTransactionTimeUTC), fs.Next_FILOID) NextFilo,
        ISNULL(LAG(af.FILOID) OVER (ORDER BY StartTransactionTimeUTC), fs.Previous_FILOID) LastFilo,
        -- 按时间排序分配行号
        ROW_NUMBER() OVER (ORDER BY StartTransactionTimeUTC) RowNum
    FROM 
        [DataWarehouseCore].[DWC_FILOSummary] fs 
    JOIN 
        [AttendanceCore].[AC_FILO] af ON af.FILOID = fs.FILOID
    WHERE 
        fs.Employee_ID = @TargetEmployeeID
        AND Client_ID = @TargetClientID
)
SELECT CurrentFilo, NextFilo, LastFilo
FROM AllFILORecords
WHERE RowNum >= (SELECT RowNum FROM AllFILORecords WHERE CurrentFilo = @TargetFILOID) - 1
ORDER BY RowNum ASC

效果验证

当传入@TargetFILOID = 6时,查询输出和预期结果完全一致:

CurrentFilo NextFilo LastFilo
-----------------------------
3           6        2
6           7        3
7           1        6
1           NULL     7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:27:03