sql - 如何根据Teradata SQL中的条件计算带重置的移动总和?

标签 sql sum teradata

我有这个数据,我想对字段USAGE_FLAG求和,但是当它降至0或移动到新ID时重置,以保持SU_IDWEEK排序的数据集:

SU_ID   WEEK    USAGE_FLAG
100        1    0
100        2    7
100        3    7
100        4    0
101        1    0
101        2    7
101        3    0
101        4    7
102        1    7
102        2    7
102        3    7
102        4    0

所以我想创建这个表:
SU_ID   WEEK    USAGE_FLAG    SUM
100        1    0             0
100        2    7             7
100        3    7             14
100        4    0             0
101        1    0             0
101        2    7             7
101        3    0             0
101        4    7             7
102        1    7             7
102        2    7             14
102        3    7             21
102        4    0             0

我已经尝试过使用MSUM()GROUP BY函数,但它不会保持上面想要的顺序。它把我不需要的7和星期几组合在一起。

有人知道这是否可能吗?我正在使用Teradata

最佳答案

在标准SQL中,可以使用窗口函数来完成运行总和:

select su_id,
       week,
       usage_flag, 
       sum(usage_flag) over (partition by su_id order by week) as running_sum
from the_table;

我知道Teradata支持窗口功能,但我不知道它是否还支持窗口定义中的订单。

重置总和要复杂一些。首先,您需要创建“usage_flag”每次更改为0时都会更改的“组ID”。以下内容在PostgreSQL中有效,我不知道它在Teradata中是否也适用:
select su_id,
       week,
       usage_flag,
       sum(usage_flag) over (partition by su_id, group_nr order by week) as running_sum
from (
  select t1.*,
         sum(group_flag) over (partition by su_id order by week) as group_nr
  from (
      select *,
             case
                when usage_flag = 0 then 1
                else 0
              end as group_flag
      from the_table
  ) t1
) t2
order by su_id, week;

关于sql - 如何根据Teradata SQL中的条件计算带重置的移动总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13819710/

相关文章:

sql - Teradata SQL 调整。重写多个左外连接

sql - 如何将 View 的所有权限授予任意用户

mysql - 使用 Mysql JOIN 进行 DISTINCT SUM

r - R 是否有办法找出哪些数字对总和有贡献? (去卷积?)

sql - 将 teradata 时间戳 (6) 转换为 SQL Server 的日期时间

python - 在 Teradata 中按字段名称引用字段(列)

sql - oracle中如何设置查看 View 的权限?

sql - 在sql server中字符串的每个字符后附加特定字符

mysql - 获取两列的每个唯一组合及其最大值和最小值的整个数据集

mysql - POS 应用程序 - 简化 SQL 多查询(MySQL)