如何在PostgreSQL中计算列中的重复值?
您好,我有一个如下表,我想计算status列中的重复值。我不想计算整个重复值。例如,我只想计算在值更改为Idle之前脱机显示的数量 这就是我想要的结果。多谢各位如何在PostgreSQL中计算列中的重复值?,sql,postgresql,Sql,Postgresql,您好,我有一个如下表,我想计算status列中的重复值。我不想计算整个重复值。例如,我只想计算在值更改为Idle之前脱机显示的数量 这就是我想要的结果。多谢各位 这通常被称为缺口和孤岛 一种方法是使用两个行号序列 检查查询的每个中间结果以了解其工作原理 WITH CTE_rn AS ( SELECT status ,dt ,ROW_NUMBER() OVER (ORDER BY dt) as rn1 ,ROW_NUMBER(
这通常被称为缺口和孤岛 一种方法是使用两个行号序列 检查查询的每个中间结果以了解其工作原理
WITH
CTE_rn
AS
(
SELECT
status
,dt
,ROW_NUMBER() OVER (ORDER BY dt) as rn1
,ROW_NUMBER() OVER (PARTITION BY status ORDER BY dt) as rn2
FROM
T
)
SELECT
status
,COUNT(*) AS cnt
FROM
CTE_rn
GROUP BY
status
,rn1-rn2
ORDER BY
min(dt)
;
结果
具有
cte1作为选择状态,
日期
工作站
状态=按工作站顺序按日期划分的分区滞后状态时的情况
然后0
否则,1号端发生变化
从测试来看,
cte2作为选择状态,
日期
工作站
按工作站顺序按日期组更改分区的SUM数量
来自cte1
选择状态、计数*计数、工作站、MINdate从、MAXdate到
来自cte2
分组编号、状态、工作站;
样本数据最好以如下方式表示。有关如何创建美观的表格的一些提示,请参见。
| status | cnt |
|---------|-----|
| offline | 2 |
| idle | 1 |
| offline | 2 |
| idle | 1 |