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

请求修正月度数据删除SQL查询:每周加载每月删除当月数据

修正后的删除语句及问题说明

你的核心需求是删除表中最新数据所在月份的所有记录,保留该月份之前的历史数据,原查询存在逻辑冗余和语法错误,以下是修正方案:

原查询的问题

  1. 子查询SELECT DISTINCT(DATA_WEEK)... ORDER BY DATA_WEEK DESC未添加LIMIT 1,会返回多条符合条件的日期,导致WHERE DATA_WEEK > (...)触发「单行子查询返回多行」的报错。
  2. 逻辑嵌套复杂,可读性差,且在跨年场景下容易出现判断偏差。

修正后的简洁写法

方法1:使用DATE_TRUNC定位月份(推荐)

DELETE FROM MHCD_AGG_CUST_ORG_SLS_WIDE_WK
WHERE DATE_TRUNC('month', DATA_WEEK) = (
    SELECT DATE_TRUNC('month', MAX(DATA_WEEK))
    FROM ADS.MHCD_AGG_CUST_ORG_SLS_WIDE_WK
);

方法2:使用年份+月份组合判断

如果你的数据库不支持DATE_TRUNC,可以用年份和月份的组合进行匹配:

DELETE FROM MHCD_AGG_CUST_ORG_SLS_WIDE_WK
WHERE (EXTRACT(YEAR FROM DATA_WEEK), EXTRACT(MONTH FROM DATA_WEEK)) = (
    SELECT EXTRACT(YEAR FROM MAX(DATA_WEEK)), EXTRACT(MONTH FROM MAX(DATA_WEEK))
    FROM ADS.MHCD_AGG_CUST_ORG_SLS_WIDE_WK
);

方案说明

  • 直接定位到表中最新DATA_WEEK所在的年月,逻辑清晰,避免原查询的语法错误。
  • 完美处理跨年场景(比如最新数据在2024年1月时,会准确删除该月所有数据,保留2023年及之前的记录)。
  • 执行效率更高,减少了不必要的排序和嵌套子查询操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:27:18