我只想查询连续重复 3 次的数字,比如这里的 1。但不是 2,因为它不是连续的。
我怎样才能在sql中实现相同的目标?
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;
如果将数据存储为表中的行,则可以简化和修改 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