+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| num | varchar |
+-------------+---------+
在 SQL 中, id 是该表的主键
id 是一个自增列
select distinct num as ConsecutiveNums
from (select *, lead(rn, 2) over (partition by num order by rn) as rn_lead
from (select num, row_number() over () as rn from Logs) t1) t2
where rn_lead - rn = 2;
方法2
sql复制代码
select distinct num as ConsecutiveNums
from (select num,
row_number() over () as rn1,
row_number() over (partition by num order by id) as rn2
from Logs
order by num, id) t
group by num, rn1 - rn2
having count(rn1 - rn2) >= 3;
Pandas实现
python复制代码
# -*- coding: utf-8 -*-
# @Time : 2025/1/12 1:30
# @Author : 从心
# @File : 180.py
# @Software : PyCharm
import pandas as pd
def consecutive_numbers(logs: pd.DataFrame) -> pd.DataFrame:
if logs.empty:
return pd.DataFrame(columns=['ConsecutiveNums'])
logs['rn'] = logs.reset_index(drop=True).index + 1
grouped = logs.groupby('num')
result = []
for name, group in grouped:
group = group.copy()
group['rn_lead'] = group['rn'].shift(-2)
result.append(group)
df = pd.concat(result)
df = df[df['rn_lead'] - df['rn'] == 2]
return df['num'].drop_duplicates().to_frame(name='ConsecutiveNums')