Postgres - 仅选择具有 FAILURE 状态的日期

问题描述

对于特定的 project_name(成功、失败、中止、不稳定),我每天有多个结果的表。我只想选择只发生 FAILURE 状态的日子 - 没有别的。有些日子有多个状态(失败后可以解决并获得不同时间的状态并设置为成功)。 如何仅选择处于 FAILURE 状态的天数?

我的查询

SELECT
    date_trunc('day',time) AS group_day,build_result,project_name
FROM project_status
WHERE project_name = 'project_x'
GROUP BY date_trunc('day',time),project_name,build_result

解决方法

使用聚合和具有

SELECT date_trunc('day',time) AS group_day,project_name
FROM project_status
WHERE project_name = 'project_x'
GROUP BY date_trunc('day',time),project_name
HAVING MIN(build_result) = MAX(build_result) AND
       MIN(build_result) = 'FAILURE'
,

您可以按group_dayproject_name分组,并在string_agg()子句中使用HAVING来设置条件build_result的唯一值是{{ 1}}:

'FAILURE'