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

Microsoft SQL查询问题:无法删除30天前的重复行

问题分析与解决方案

你的查询未生效,核心问题出在两个地方:

  1. ROW_NUMBER排序逻辑错误:使用ORDER BY (SELECT NULL)会让重复组内的行排名随机分配,你想要删除的旧数据(05-02-2023那行)大概率被分配为DupRank=1,导致DupRank>1的条件无法命中它。
  2. 日期比较的潜在风险:如果dayTime字段是字符串类型(而非DATE/DATETIME),日期格式解析可能出错,导致dayTime < DATEADD(day, -30, GETDATE())的判断不符合预期。

修正后的查询语句

DELETE T
FROM
(
    SELECT *
    , DupRank = ROW_NUMBER() OVER (
                  PARTITION BY id1, id2
                  ORDER BY dayTime DESC  -- 按日期倒序,最新的行排名为1
                )
    FROM [dbo].[test]
) AS T
WHERE DupRank > 1  -- 只删除重复组内的非最新行
  AND dayTime < DATEADD(day, -30, GETDATE())  -- 且这些行日期超过30天

额外注意事项

  • 确保dayTime字段的数据类型是DATE或DATETIME,如果当前是字符串类型,建议先修改字段类型,或者在查询中显式转换(例如CONVERT(DATE, dayTime, 105),对应日-月-年格式),避免日期比较出错。
  • 测试时可以先把DELETE替换为SELECT *,查看哪些行会被选中,确认逻辑符合预期后再执行删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:53:15