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

MS SQL Server:提取行间CreatedDate间隔≥10天的ParentRef

解决MS SQL Server提取符合条件的ParentRef问题

嘿,我来帮你搞定这个需求!你需要找出那些同ParentRef组内存在相邻两行CreatedDate间隔≥10天的ParentRef,结合你的示例数据,我给你整理了一套实用的SQL方案:

思路拆解

  1. 按PARENTREF分组,确保我们只在同一个父引用的记录范围内处理;
  2. 使用窗口函数LEAD()获取当前行的下一行CreatedDate,实现“当前行与下一行”的关联;
  3. 计算两个日期的天数差,筛选出差值≥10的记录,最后去重得到目标PARENTREF。

完整SQL代码

WITH RankedNotes AS (
    SELECT 
        PARENTREF,
        -- 将字符串格式的CREATEDDATE转为DATE类型(112对应yyyyMMdd格式)
        CONVERT(DATE, CREATEDDATE, 112) AS FormattedCreatedDate,
        -- 获取同组内下一行的格式化日期
        LEAD(CONVERT(DATE, CREATEDDATE, 112)) OVER (
            PARTITION BY PARENTREF 
            ORDER BY CONVERT(DATE, CREATEDDATE, 112), CREATEDTIME
        ) AS NextFormattedCreatedDate
    FROM YourTableName -- 记得替换成你的实际表名
)
SELECT DISTINCT PARENTREF
FROM RankedNotes
WHERE 
    NextFormattedCreatedDate IS NOT NULL -- 排除每组最后一行(无下一行可对比)
    AND DATEDIFF(DAY, FormattedCreatedDate, NextFormattedCreatedDate) >= 10;

代码细节说明

  • CTE RankedNotes:预处理数据,把字符串类型的日期转成可计算的DATE格式,同时用LEAD窗口函数关联同组的下一行日期;
  • PARTITION BY PARENTREF:限定只在同一个ParentRef的记录组内查找下一行,避免跨组对比;
  • ORDER BY:按日期+时间排序,保证“下一行”是时间逻辑上的后续记录;
  • DISTINCT:避免同一个ParentRef因为多组相邻行满足条件而重复出现在结果中。

针对你的示例数据的预期结果

运行这段代码后,会返回以下PARENTREF:

  • 2014297(2016-02-16 到 2016-03-17,间隔30天)
  • 2019109(2015-06-08 到 2015-06-18,间隔10天)
  • 2021908(2015-05-26 到 2015-06-11,间隔16天)

而2000363因为两行日期相同,间隔0天,不会被选中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:24