【问题标题】:Trying to create a Teradata view to aggregate how long rows of a specific ID have had a certain value尝试创建 Teradata 视图以聚合特定 ID 的行有多长具有特定值
【发布时间】:2017-03-13 15:52:48
【问题描述】:

我有一个测试报告表,每次运行测试后都会写一行。

假设这是数据:

| main_id | status |  date   |
|---------|--------|---------|
|  123    |  pass  | Jan 1st |
|  123    |  fail  | Jan 2nd |
|  123    |  fail  | Jan 3rd |
|  123    |  fail  | Jan 4th |

我想为每个测试创建一个视图,列出它失败的时间。

基本上,上述数据的对应行如下所示:

| main_id | days_failing |
|---------|--------------|
|  123    |      3       |

使用Teradata SQL,如何检查源表中的每一行,寻找最后一次成功,然后总结所有后续失败?

编辑:请注意,源表中会有许多不同的“main_id”,对于源表中的每个唯一失败的测试,我需要在视图中有 1 行。

谢谢

【问题讨论】:

    标签: sql database teradata


    【解决方案1】:
    select      main_id
               ,count (*) - 1   as days_failing
    
    from       (select      main_id
                           ,"date"
    
                from        t
    
                qualify     "date" >= max (case status when 'pass' then "date" end) over (partition by main_id)
                ) t
    
    group by    main_id
    
    order by    main_id
    ;
    

    【讨论】:

    • Hmmm...this(选项 1)越来越接近,因为它只选择失败的行,但它的 days_failing 字段仅填充 1,无论失败实例有多少天测试了。这可能很重要,但我的日期字段实际上是一个时间戳,我只是针对这个问题对其进行了简化。
    • @user1029167 ,查询计算最后一次“通过”后的行数。除非这确实是您的数据,否则它不会使您始终得到 1
    • @user1029167。太好了 :-) 因为这是一个正确的答案,请将其标记为正确答案。谢谢
    • @user1029167 还请注意,只会显示至少有 1 个“pass”的 main_id。那样可以么。由你?
    猜你喜欢
    • 2020-01-14
    • 2018-05-09
    • 2018-02-09
    • 1970-01-01
    • 2018-12-21
    • 2022-12-22
    • 2022-11-20
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多