如何对不符合 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);
我正在尝试使用 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);