SQL 查询以查找一年中用户参加的事件的最大数量

SQL query to find maximum number of attended events by user given a year

我很难理解这个问题。这是我拥有的:

user_id | year
1 | 2015
1 | 2016
1 | 2018
1 | 2019
1 | 2020
2 | 2015
2 | 2016
2 | 2017
2 | 2018
2 | 2019

我要的是一个结果:

user_id | count
1 | 3
2 | 5

所以对于每个用户,我需要知道基于年份的最长连续连续条纹。用户 1 在 2017 年有差距,因此最长的连续出现时间是 2018-2020 年。用户 2 没有中断,因此他们的连续记录是 5 年。我想确保任何差距本质上都会重置计数。我已经找到了许多用于计算日期等的解决方案,但我似乎找不到一个用于增加整数值的解决方案,它基本上必须是下一个序列而不仅仅是更大。我希望有一个聪明的 MySQL 兼容查询。

这是一种方法。减去一个序列号——它对于连续值是不变的。然后聚合拉出最长的:

select t.*
from (select user_id, count(*) as streak_length,
             min(year) as min_year, max(year) as max_year,
             row_number() over (partition by user_id order by count(*) desc) as seqnum
      from (select t.*,
                   row_number() over (partition by user_id order by year) as seqnum
            from t
           ) t
      group by user_id, year - seqnum
     ) t
where seqnum = 1;