You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用row_number()查询participation表连续3年有记录的用户

实现方案

可以在你原有SQL的基础上扩展实现,无需使用row_number(),有两种可行写法:

写法1:扩展自关联逻辑,直接匹配连续3年记录

SELECT DISTINCT name
FROM participation p1
JOIN participation p2 
  ON p1.name = p2.name AND p2.year = p1.year + 1
JOIN participation p3 
  ON p1.name = p3.name AND p3.year = p1.year + 2

逻辑说明:

  • 三次关联同一张表,校验同一个用户存在连续三年的参与记录(p1.year、p1.year+1、p1.year+2均有数据)
  • 加DISTINCT去重后直接输出符合要求的用户名,样例数据下返回Carol、John,自动排除不符合要求的用户

写法2:完全基于你原有SQL外层加筛选逻辑

SELECT name
FROM (
  -- 你原有查询逻辑,仅修正了表名拼写错误
  SELECT DISTINCT p1.name, p1.year
  FROM participation p1,
       participation p2
  WHERE (p1.year = p2.year + 1 OR p1.year = p2.year - 1) AND p1.name = p2.name
) t
GROUP BY name
HAVING COUNT(DISTINCT year) >= 3

逻辑说明:

  • 内层完全保留你原有逻辑,筛选出所有存在相邻参与记录的用户年份行
  • 外层按用户名分组,统计每个用户符合相邻条件的年份数量,连续3年参与的用户对应的年份数量必然>=3
  • 你原有SQL中的表名participatition拼写有误,执行时请修正为正确的participation

内容的提问来源于stack exchange,提问作者barnyard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:57:02