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

Redshift窗口函数FILTER子句不支持的条件计数实现方案

问题原因

Redshift基于旧版PostgreSQL内核,不支持窗口函数的FILTER子句语法。你最初写的SQL同时存在字段重复、多余逗号、窗口范围不符合统计逻辑的问题,无法正常运行得到预期结果。

可直接运行的Redshift兼容SQL

Redshift中实现窗口条件统计的标准方案是将条件判断嵌入CASE WHEN语句,传入聚合函数实现和FILTER完全一致的效果。针对你需要按super_location、sub_super_location分区,统计每行对应日期下condition=1的location数量的需求,代码如下:

SELECT
  date AS order_date,
  super_location,
  sub_super_location,
  location,
  condition,
  COUNT(CASE WHEN condition = 1 THEN location END) OVER (
    PARTITION BY super_location, sub_super_location, date
  ) AS count
FROM table1
ORDER BY date DESC, location;
语法说明
  • 条件逻辑替换:CASE WHEN condition = 1 THEN location END 等价于 FILTER (WHERE condition = 1) 的判断逻辑:满足条件时返回location值参与计数,不满足时返回null,count聚合会自动跳过null值,统计结果无偏差。
  • 窗口规则适配:你的需求是统计当前日期下的符合条件的记录数,不是按日期累计的历史值,因此将date加入窗口分区键,窗口会自动匹配同上级区域、同日期的所有行,不需要额外写ORDER BY或窗口范围限定,执行效率更高,结果更稳定。
  • 语法错误修复:修正了原SQL中重复选取super_location、遗漏sub_super_location、SELECT子句多余前置逗号的问题。
扩展场景(累计统计)

如果你后续需要统计截止到当前日期的历史累计符合条件的location数(而非当日值),可以将窗口定义调整为累计范围,写法如下:

COUNT(CASE WHEN condition = 1 THEN location END) OVER (
  PARTITION BY super_location, sub_super_location
  ORDER BY date
  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS cumulative_count

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:06:29