如何将Tableau周三前排除当周的逻辑迁移到周聚合SQL查询
需求对齐说明
你需要实现的规则和原有Tableau逻辑完全对齐:周三前过滤当周未完结的周聚合数据,仅返回已完成统计的历史周数据,具体规则为每周起始日(示例中为周日)对应的当周数据,要到当周周三才可对外展示。
通用SQL实现逻辑
核心判断逻辑无需额外判断当前日期是周几,天然适配所有日期场景:只要周起始日期Date_week加上3天后的日期小于等于当前日期,该周数据就可展示,否则过滤。
假设你的周聚合表名为weekly_stats,通用查询模板如下:
SELECT Date_week, Total FROM weekly_stats -- 核心过滤条件:周起始日+3天(即当周周三)<= 当前日期时,该周数据允许展示 WHERE DATE_ADD(Date_week, INTERVAL 3 DAY) <= CURRENT_DATE ORDER BY Date_week DESC;
不同SQL方言适配
不同数据库的日期函数语法存在差异,对应调整核心过滤条件即可:
- MySQL、达梦等:
DATE_ADD(Date_week, INTERVAL 3 DAY) <= CURDATE() - PostgreSQL:
(Date_week + INTERVAL '3 days')::DATE <= CURRENT_DATE - SQL Server:
DATEADD(DAY, 3, Date_week) <= CAST(GETDATE() AS DATE) - Oracle:
Date_week + 3 <= TRUNC(SYSDATE)
逻辑验证
用你提供的示例数据验证效果:
当周Date_week为2021-11-21(周日),加3天后为2021-11-24(周三):
- 当前日期为2021-11-23(周二)时,自动过滤2021-11-21的记录,仅返回2021-11-14及更早的历史数据
- 当前日期为2021-11-24(周三)及之后时,正常展示2021-11-21的当周记录,完全匹配要求
备注:如果你的周起始规则为周一,仅需要把加3天调整为加2天即可,逻辑通用。
内容的提问来源于stack exchange,提问作者Ethan Smih
相关产品推荐
相关产品推荐

