如何对不符合 Postgres 条件的数据进行分组

How to group data not matching a condition in Postgres

我正在尝试使用 Postgres 对数据进行分组。

输入数据:

我的期望结果如果输出为0,则与其他结果分组,如果输出大于0,则与其他结果分组,因此我们将知道,0输出的时间段。

这是一个缺口和孤岛问题。一种方法使用行号差异方法:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Seq ORDER BY Datetime) rn1,
              ROW_NUMBER() OVER (PARTITION BY Seq, Output > 0
                                 ORDER BY Datetime) rn2
    FROM yourTable
)

SELECT
    Seq,
    MIN(Datetime) AS MinDatetime,
    MAX(Datetime) AS MaxDatetime,
    SUM(Output) AS sum_output
FROM cte
GROUP BY
    Seq,
    Output > 0,
    rn1 - rn2
ORDER BY
    Seq,
    MIN(Datetime);