在Postgres上连续滚动期间过滤重复输出

时间:2018-06-21 19:18:32

标签: postgresql

我有一个简单的表,其中包含每日回归测试结果,并希望获得过去三天内连续失败的测试输出。

表看起来像这样。

| 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可能在同一天多次运行)

1 个答案:

答案 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