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

Posted

技术标签:

【中文标题】Postgres - 仅选择具有 FAILURE 状态的日期【英文标题】:Postgres - Select days with FAILURE status only 【发布时间】:2021-09-22 22:49:45 【问题描述】:

对于特定项目名称(SUCCESS、FAILURE、ABORTED、UNSTABLE),我每天都有多个结果表。我只想选择仅出现 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

【问题讨论】:

【参考方案1】:

使用聚合和拥有

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'

【讨论】:

【参考方案2】:

您可以通过group_dayproject_name进行分组,并在HAVING子句中使用string_agg()来设置build_result的唯一值是'FAILURE'的条件:

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

【讨论】:

非常感谢大家。它似乎对我来说工作正常。

以上是关于Postgres - 仅选择具有 FAILURE 状态的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django ORM 在 postgres 中仅选择日期部分

如何使用窗口函数仅在 POSTGRES 中选择不超过某个值的行

Postgres 仅索引扫描耗时太长

带有 Pony ORM 的 Postgres 模式

如何在 Postgres 中从具有非均匀分布的表中选择随机行?

在特定列 postgres 中选择具有最大值的组中的行