【发布时间】:2021-10-30 02:00:36
【问题描述】:
我想从“参与”表(姓名,年份)中选择 3 个连续(按年份)具有相同值的记录:
Name Year
-------------
Carol 1999
Carol 2000
Carol 2001
Carol 2002
Faith 1996
John 2001
John 2002
John 2003
John 2009
Lyla 1994
Lyla 1996
Lyla 1997
这是我的初始代码:
SELECT DISTINCT p1.name, p1.year
FROM participatition p1,
participatition p2
WHERE (p1.year = p2.year + 1 OR p1.year = p2.year - 1) AND p1.name = p2.name
ORDER BY p1.name, p1.year
返回所有连续记录,但我只想要满足 3 个连续条件的记录,即不是 Lyla:
Name Year
-------------
Carol 1999
Carol 2000
Carol 2001
Carol 2002
John 2001
John 2002
John 2003
Lyla 1996
Lyla 1997
是否可以在我的代码的基础上构建,例如添加一个额外的标准,以优化选择而不实现 row_number() 方法?
我想要以下输出:
姓名
卡罗尔 约翰
即所有记录,如果至少有 3 个连续的
【问题讨论】:
-
输出应该是什么样子?如果至少有 3 个连续记录,它应该只列出 3 条记录还是所有记录。它不清楚应该给输入什么输出
-
今日提示:切换到现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 -
当你说“不是 Lyla”时,为什么 Lyla 在预期结果中?
-
使用 modern 连接语法 jarlh 是指我们在过去三十年中一直使用的语法,而不是 1980 年代使用的逗号分隔连接 :-)
-
为什么是
DISTINCT?参与表可以有多行同名同年吗?还是仅仅因为join会产生重复?
标签: mysql sql window-functions