gpt4 book ai didi

sql - 如何计算 PostgreSQL 列中的重复值?

转载 作者:行者123 更新时间:2023-12-04 10:28:40 24 4
gpt4 key购买 nike

嗨,我有一个如下表,我想计算状态列中的重复值。我不想计算整体重复值。例如,我只想计算在值变为“空闲”之前出现了多少“离线”。

enter image description here

这是我想要的结果。谢谢你。

enter image description here

最佳答案

这通常称为间隙和孤岛。

一种方法是使用两个行号序列。

检查查询的每个中间结果以了解其工作原理。

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)
;

结果
| status  | cnt |
|---------|-----|
| offline | 2 |
| idle | 1 |
| offline | 2 |
| idle | 1 |

关于sql - 如何计算 PostgreSQL 列中的重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60519026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com