Teradata SQL:计算错误代码连续出现的次数(并在不发生时重置)

Posted

技术标签:

【中文标题】Teradata SQL:计算错误代码连续出现的次数(并在不发生时重置)【英文标题】:Teradata SQL: Calculate number of successive occurrences of error code (and reset on non occurrence) 【发布时间】:2020-11-16 19:46:28 【问题描述】:

我有一个源表,其中包含多个项目的运行时间以及该运行期间产生的错误代码。我正在寻找的结果应该显示每个项目的每个错误发生了多少次连续运行。如果错误跳过运行,则计数重置。运行并不总是连续几天运行。这个想法是找出错误代码连续发生,而不是为每个项目重置。

Item    Run Run_date    Err_Code
------------------------------------------
A        1  1/1/2020    ERR1
A        1  1/1/2020    ERR2
A        1  1/1/2020    ERR3
A        2  1/2/2020    ERR1
A        2  1/2/2020    ERR2
A        3  1/3/2020    ERR1
A        3  1/3/2020    ERR2
A        4  1/4/2020    ERR2
A        4  1/4/2020    ERR3
A        5  1/5/2020    ERR1
A        5  1/5/2020    ERR3
B..
B..
B..

Result: 3 cols

Item    Err_Cd  Times
---------------------
A       ERR1    3 (meaning ERR1 occurred thrice in succession for A in runs 1,2,3)
A       ERR1    1 (meaning ERR1 occurred once for A in run 5)
A       ERR2    4 (meaning ERR2 occurred 4 times in succession for A in runs 1,2,3,4)
A       ERR3    1 (meaning ERR3 occurred once for A in run 1)
A       ERR3    2 (meaning ERR3 occurred twice in succession for A in runs 4,5)
B..
B..

感谢任何帮助!谢谢。

【问题讨论】:

【参考方案1】:

您可以从日期中减去row_number() 并汇总:

select item, err_cd, count(*)
from (select t.*,
             row_number() over (partition by item, err_cd order by run) as seqnum
      from t
     ) t
group by item, err_cd, run - seqnum
order by item, err_cd, min(run);

【讨论】:

@user1760691 如果它解决了您的问题,请务必将答案标记为正确/接受

以上是关于Teradata SQL:计算错误代码连续出现的次数(并在不发生时重置)的主要内容,如果未能解决你的问题,请参考以下文章

Teradata 中数据计算和导出

SQL:连续天数的计算方法

SQL/Teradata:如何返回特定值及其前面的行?

计算一个值在 Hive/SQL 中连续出现的次数

SQL - HSQL 如何计算一个数字的连续出现次数

SQL:计算每个设备集连续出现相同值的所有记录并返回最高计数