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

Snowflake SQL 如何删除最近一个周日之前的视图数据

实现方案

首先明确:普通逻辑视图为虚拟表,不支持直接删除行,你可以选择操作视图对应的底层基表,或者直接修改视图查询逻辑过滤掉不符合要求的行,无需删除底层数据。

核心思路

基于Snowflake内置的日期函数动态计算最近的周日日期,完全不需要硬编码。你已有的星期几计算列规则(周一=1、周日=7)和Snowflake自带的DAYOFWEEKISO函数返回规则完全一致,可以直接复用。

方法1:基于当前系统时间计算最近周日

适合需要和实际日期对齐的场景

  1. 先定义动态最近周日变量
-- 如果当天是周日则取当天,否则取上周日
SET latest_sunday = IFF(DAYOFWEEKISO(CURRENT_DATE()) = 7, CURRENT_DATE(), DATEADD('day', -DAYOFWEEKISO(CURRENT_DATE()), CURRENT_DATE()));
  1. 执行删除(针对基表)
DELETE FROM 你的基表名称
WHERE TO_DATE(你的日期字段名, 'DD-MM-YYYY') < $latest_sunday;
  1. 如果直接修改视图逻辑,无需删除数据:
CREATE OR REPLACE VIEW 你的视图名称 AS
SELECT * FROM 原表/原视图
WHERE TO_DATE(你的日期字段名, 'DD-MM-YYYY') >= IFF(DAYOFWEEKISO(CURRENT_DATE()) = 7, CURRENT_DATE(), DATEADD('day', -DAYOFWEEKISO(CURRENT_DATE()), CURRENT_DATE()));

方法2:基于数据内存在的周日计算

适合数据存在日期缺失,需要取数据中最新的周日作为基准的场景,可直接复用你已有的星期几计算列

DELETE FROM 你的基表名称
WHERE TO_DATE(你的日期字段名, 'DD-MM-YYYY') < (
    -- 取数据中最新的周日日期
    SELECT MAX(TO_DATE(你的日期字段名, 'DD-MM-YYYY'))
    FROM 你的基表名称
    WHERE 你的星期几计算列名称 = 7
);

注意事项

  • 执行删除前建议先运行SELECT语句验证过滤结果,避免误删:
SELECT * FROM 你的基表名称
WHERE TO_DATE(你的日期字段名, 'DD-MM-YYYY') < 你计算出的周日基准日期;
  • 如果你的日期字段已经是日期类型而非字符串,可以去掉TO_DATE转换步骤直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:06