我正在Teradata中编写查询,需要求和一个对象命中一个数字所花费的时间。例如...对于数字0-4,我想对自对象达到3或更高的时间进行求和。 我从
开始SUM(time)
OVER (PARTITION BY object
ORDER BY object, number
ROWS UNBOUNDED PRECEDING 1 FOLLOWING)
任何帮助将不胜感激。
样本数据... IDnum WS times
1 0 8012
1 1 6254
2 3 10225
2 1 5896
2 4 5485
2 0 7482
3 1 5487
3 2 5214
WS的范围是0-4,我需要对每个ID自翻新以来的时间求和,并在WS为3或更高(3或更高表示翻新)时重置时间计数。也就是说,如果有意义,我需要一个“自上次翻新以来的时间”。
期望的结果将是IDnum WS times time since last refurb
1 0 8012 14266
1 1 6254 14266
2 3 10225 16121
2 1 5896 16121
2 4 5485 23668
2 0 7482 23668
3 1 5487 23668
3 2 5214 23668
或类似的东西
答案 0 :(得分:0)
您可以使用row_number()函数来生成累加和的序列:
select *, sum(times) over (partition by grp) as time_since_last_refurb
from (select *, sum(case when ws >= 3 then 1 else 0 end) over (order by seq) grp
from (select *, row_number() over (order by idnum) seq
from table
) t
) t;