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

使用T-SQL从文章日志表中筛选符合指定规则的日志行

前提假设

我们默认日志表名为ArticleLogs,日志的先后顺序按自增主键Id升序判定(如果实际业务用创建时间字段排序,替换代码中对应字段即可),核心字段如下:

  • Id:日志主键,自增
  • ArticleId:关联的文章唯一标识
  • StatusId:日志状态值

T-SQL 实现代码

WITH ArticleLogStats AS (
    SELECT 
        *,
        -- 统计当前文章的总日志条数
        COUNT(1) OVER (PARTITION BY ArticleId) AS TotalLogCnt,
        -- 取当前文章第一条Status=103的日志Id,不存在则为NULL
        MIN(CASE WHEN StatusId = 103 THEN Id END) OVER (PARTITION BY ArticleId) AS First103LogId
    FROM ArticleLogs
)
SELECT Id -- 如需返回完整日志行,替换为*即可
FROM ArticleLogStats
WHERE 
    -- 规则1:文章仅1条日志直接返回
    TotalLogCnt = 1
    -- 规则2:文章日志数大于1的场景
    OR (
        TotalLogCnt > 1
        AND (
            -- 不存在Status=103的日志,返回全部
            First103LogId IS NULL
            -- 存在Status=103的日志,仅返回该条之后的日志
            OR Id > First103LogId
        )
    )
ORDER BY ArticleId, Id;

逻辑说明

  • 先用CTE给每行日志追加两个窗口统计值,避免多次关联查询,性能更优
  • 筛选条件完全匹配需求规则,你给出的示例场景下:某文章有2条日志,Id为1382(StatusId=103)、1383,会命中Id>1382的条件返回1383;另一篇文章仅有1条日志Id为284653,直接命中单条规则返回,最终正好得到你要求的两条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:30:01