【问题标题】:teradata sql - aggregating time until reset?teradata sql - 聚合时间直到重置?
【发布时间】:2018-11-29 21:23:05
【问题描述】:

我正在 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

或类似的东西

【问题讨论】:

  • 编辑您的问题并提供示例数据和所需的结果。
  • 您当然必须使用“RESET WHEN”子句。发布示例数据会有所帮助。
  • 您当前的 SQL 语法无效,您的解释很难理解。你能展示一些示例数据和预期结果吗?
  • 您能否再次编辑并分享您对此示例数据的预期结果。结果仍然不清楚您想要什么。
  • 数据是如何排序的?

标签: sql sum teradata reset


【解决方案1】:

您可以使用 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2018-08-16
    • 1970-01-01
    • 2021-09-03
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多