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

SQL序列号与起止日期验证脚本求助(SQL Management Studio 2016)

验证锅炉维保表中最新序列号的日期合法性

嘿,欢迎来到社区!作为刚接触SQL Server和SSMS 2016的新手,能主动提问真的很棒😊 针对你的需求,我来给你写个实用的脚本,帮你快速找出每个地址最新维保记录里不符合「开始日期≤结束日期」的情况。

思路说明

我们需要先按地址分组,取出每个地址对应的最新序列号记录,然后再检查这些记录的日期是否合法。这里的「最新」我默认是按记录的开始日期倒序(也就是最近的维保记录),如果你的“最新序列号”是指序列号本身数值最大的,我也会在脚本里标注修改点。

验证脚本

-- 先定义一个CTE,用来筛选每个地址的最新维保记录
WITH LatestBoilerMaintenance AS (
    SELECT 
        Address,
        SerialNumber,
        StartDate,
        EndDate,
        -- 给每个地址的记录按日期倒序编号,最新的记录会标记为1
        ROW_NUMBER() OVER (PARTITION BY Address ORDER BY StartDate DESC) AS RecordRank
        -- 如果是按序列号大小取最新,把上面的ORDER BY改成:ORDER BY SerialNumber DESC
    FROM 
        YourBoilerMaintenanceTable -- 替换成你实际的表名
)
-- 从CTE中筛选出最新记录,并且找出开始日期大于结束日期的异常数据
SELECT 
    Address,
    SerialNumber,
    StartDate,
    EndDate,
    '开始日期大于结束日期,数据异常' AS ErrorMessage
FROM 
    LatestBoilerMaintenance
WHERE 
    RecordRank = 1 -- 只保留每个地址的最新记录
    AND StartDate > EndDate; -- 筛选出不合法的日期记录

新手使用提示

  • 记得把YourBoilerMaintenanceTable替换成你实际的表名称,同时确认Address、SerialNumber、StartDate、EndDate这些字段名和你的表一致。
  • 如果不确定分组后的最新记录是否正确,可以先去掉WHERE子句里的AND StartDate > EndDate,运行脚本看看每个地址的第一条记录是不是你要的“最新序列号”记录。
  • 运行脚本后,如果返回结果为空,说明所有地址的最新维保记录日期都是合法的;如果有返回行,就是需要修正的异常数据啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:12:26