【问题标题】:SQL query to find maximum number of attended events by user given a yearSQL查询以查找给定一年的用户参加的最大事件数
【发布时间】:2020-03-09 21:11:58
【问题描述】:

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

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 兼容查询。

【问题讨论】:

标签: mysql sql sequence gaps-and-islands


【解决方案1】:

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

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;

【讨论】:

  • 这行得通!幸运的是,我没有处理太多数据,也不是我依赖性能的东西。关键是我需要 MySQL 8,因为我无法对数据进行分区。欣赏!
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多