我有一个简单的表,其中包含每日回归测试结果,并希望获得过去三天内连续失败的测试输出。
表看起来像这样。
| ID | rule | status | environment | date | note |
------------------------------------------
| 1 | Test01 | pass | dev | 2018-05-23 |
| 2 | Test02 | pass | dev | 2018-05-23 |
| 3 | Test03 | pass | dev | 2018-05-23 |
| 4 | Test01 | pass | staging | 2018-05-23 |
| 5 | Test02 | pass | staging | 2018-05-23 |
| 6 | Test03 | pass | staging | 2018-05-23 |
| 7 | Test01 | pass | dev | 2018-05-24 |
| 8 | Test02 | fail | dev | 2018-05-24 | fail note
| 9 | Test03 | pass | dev | 2018-05-24 |
| 10 | Test01 | fail | dev | 2018-05-24 | fail note
| 11 | Test02 | fail | dev | 2018-05-24 | fail note
| 12 | Test03 | pass | dev | 2018-05-24 |
| 13 | Test01 | pass | dev | 2018-05-25 |
| 14 | Test02 | fail | dev | 2018-05-25 | fail note
| 15 | Test03 | fail | dev | 2018-05-25 | fail note
| 16 | Test01 | pass | dev | 2018-05-26 |
| 17 | Test02 | fail | dev | 2018-05-26 | fail note
| 18 | Test03 | pass | dev | 2018-05-26 |
那么,假设今天是2018年5月26日,我如何输出显示Test02在最近3天或Postgres中的ID(滚动期)失败的结果?
我之所以要连续进行测试的原因是,由于网络问题,有些测试可能一天无法通过,而第二天又要通过,而第二天又要失败,因此具有连续性要求可以确保消除这种情况。此外,同一天也有重复的测试运行(因此Test01可能在同一天多次运行)
答案 0 :(得分:0)
关于当前日期,您想浏览距日期最多2天的记录,并仅显示发现测试一直失败的规则(针对每个环境)分别):
select rule, environment
from t
where date > current_date - 3 -- for your sample data it's '2018-05-26'
group by rule, environment
having sum(case when status = 'fail' then 1 end) = count(*)
示例数据和where date > '2018-05-26'::date - 3
的输出:
rule | environment
--------+-------------
Test02 | dev