0

我只想查询连续重复 3 次的数字,比如这里的 1。但不是 2,因为它不是连续的。

我怎样才能在sql中实现相同的目标?

4

2 回答 2

2

SQL 表代表无序集(好吧,技术上是多集)。假设您的“列表”存储为表中的行并且有一个排序列,那么您可以使用lead()

select distinct number
from (select t.*,
             lead(number) over (order by <ordering col>) as next_number,
             lead(number, 2) over (order by <ordering col>) as next_number_2
      from t
     ) t
where number = next_number and number = next_number_2;
于 2021-01-07T13:15:22.297 回答
0

如果将数据存储为表中的行,则可以简化和修改 Gordon 的逻辑以进行任意次数的重复:

select distinct number
from t
qualify
   -- same value in the last n rows, n=3
   min(number) over (order by <ordering col> rows 2 preceding) =
   max(number) over (order by <ordering col> rows 2 preceding)
   -- to avoid false positives for the first n-1 rows
and count(number) over (order by <ordering col> rows 2 preceding) = 3
于 2021-01-08T10:39:10.230 回答