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_day
和project_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 中选择不超过某个值的行