You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计ClickHouse中双值列的状态切换次数

ClickHouse统计状态切换次数方法

需求:数据表中value字段仅包含one和two两个值,需统计该字段的状态切换次数(即one→two或two→one的切换)。

示例数据:

time                        value
2022-09-19 04:03:06.845     one
2022-09-19 04:03:06.846     two
2022-09-19 04:03:08.055     two
2022-09-19 04:03:08.141     one
2022-09-19 04:03:08.160     one
2022-09-19 04:03:08.258     one
2022-09-19 04:03:08.757     two
2022-09-19 04:03:08.983     two
2022-09-19 04:03:12.051     two
2022-09-19 04:03:12.785     two
2022-09-19 04:03:12.860     one

预期统计结果:

count(*)
4

实现SQL

使用LAG窗口函数获取按时间排序后的上一行value,对比当前行与上一行的值是否不同,统计不同的记录数量即可:

SELECT count(*) AS switch_count
FROM (
    SELECT 
        value,
        LAG(value) OVER (ORDER BY time) AS prev_value
    FROM gsegsdhfhdgfhgdfhdjhhjghjh
) t
WHERE value != prev_value

测试表创建语句

create table gsegsdhfhdgfhgdfhdjhhjghjh(time DateTime64,  value String) 
Engine = Memory as
select * from values (
('2022-09-19 04:03:06.845','one'),
('2022-09-19 04:03:06.846','two'),
('2022-09-19 04:03:08.055','two'),
('2022-09-19 04:03:08.141','one'),
('2022-09-19 04:03:08.160','one'),
('2022-09-19 04:03:08.258','one'),
('2022-09-19 04:03:08.757','two'),
('2022-09-19 04:03:08.983','two'),
('2022-09-19 04:03:12.051','two'),
('2022-09-19 04:03:12.785','two'),
('2022-09-19 04:03:12.860','one'))

内容的提问来源于stack exchange,提问作者ditrauth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:45:38