我有下面的Logs数据集表格,其中"ID"列是身份,"Num"列代表一个简单的数字,可以有重复项.我只想输出"Num"列中连续出现两次以上的值.例如:值1连续出现三次,因此前3行的输出结果为1.但是,值1和值2都没有连续重复超过2次,因此它们不在输出中:

Logs table:
+----+-----+
| id | num |
+----+-----+
| 1  | 1   |
| 2  | 1   |
| 3  | 1   |
| 4  | 2   |
| 5  | 1   |
| 6  | 2   |
| 7  | 2   |
+----+-----+

Output: 
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+

我try 了下面的查询,但它四次返回数字1,并且无法检测到输出所需的"连续"性质:

with cte as(
 select logno,grp = sum(case when logno = repeat_val then 0 else 1 end) over (order by sno) from
 (
 select sno,logno,
 lag(logno) over(order by logno) as repeat_val
 from 
 logprac l) s)

 select logno as ConsecutiveNums , count(*) 
 from cte
 group by grp,logno
having count(*)>2
 order by grp;

推荐答案

这是一个典型的鸿沟和岛屿问题

Example

Select num
 From  (
        Select *
              ,Grp = row_number() over (order by id)
                    -row_number() over (partition by num order by id)
         From  YourTable
       ) A
 Group by Grp,num
 Having count(*)>2

Results

num
1

Sql相关问答推荐

在多个联合中使用相同的SELECT SQL查询

连接特定行号

如何使用WSO2将空值传递给我的SQL Server存储过程?

重新组合已排序的日期范围

基于多列比较连接两个表

更新其组的日期字段值小于最大日期减go 天数的记录

对多个条件的SQL进行排名

SQL Athena/prest判断值是否在嵌套的json数组中

按用户和时间列出的SQL Group考勤列表

将 jsonb 数组中的对象取消嵌套到单独的行中

从输出中删除 jsonb_build_object

Clickhouse:左连接表到外部数组

如何优化仅返回符合条件的三条记录的查询?

SQL Server: 将JSON对象数组转换为表格格式

PostgreSQL如何将Unix纪元时间戳转换为日期时间并进行拼接

SQL 函数 DIFFERENCE 返回有趣的分数

T-SQL - 返回每条记录的最近雇佣日期

如何从 2 个 SQLite 表构建嵌套对象?

根据条件列出不同的值

每组跨行曲折?