Sqlite 查找具有相同列值的连续行范围

Sqlite 查找具有相同列值的连续行范围,sqlite,Sqlite,我有一个带有递增主键的表e。其中一个示例行如下所示: id | name | year | info 3 | a | 1 | any 5 | a | 1 | any 6 | a | 1 | any 7 | b | 3 | any 9 | b | 3 | any 10 | a | 3 | any 11 | a | 1 | any 我希望所有这些连续的行都从最小行开始,并具有与最小行id 3相同的名称和年

我有一个带有递增主键的表e。其中一个示例行如下所示:

id | name | year | info
3  | a    | 1    | any
5  | a    | 1    | any
6  | a    | 1    | any
7  | b    | 3    | any
9  | b    | 3    | any
10 | a    | 3    | any
11 | a    | 1    | any
我希望所有这些连续的行都从最小行开始,并具有与最小行id 3相同的名称和年份值。限制是我需要使用一个SELECT语句获得结果

因此,在本例中,结果应为3,5,6:

3 | a | 1 | any
5 | a | 1 | any
6 | a | 1 | any
如果我们删除这三行并再次查询,我们将得到7,9:

7 | b | 3 | any
9 | b | 3 | any
这是我当前的查询,但不起作用。我是SQL新手,想知道如何简化它吗

SELECT * 
FROM e AS E1, 
     (SELECT name, year FROM e WHERE id = (SELECT min(id) FROM e)) AS M1 
WHERE 
     E1.name = M1.name AND 
     E1.year = M1.year AND 
     E1.id < (SELECT min(id) 
              FROM e AS E2 
              WHERE E2.name != M1.name OR E2.year != M1.year)
最里面的查询搜索要返回的第一个ID

中间查询搜索不属于结果的第一行,即ID较大且名称或年份不同的第一行。 在表的末尾,结果为空;然后,合并返回一个大于任何数字的值

然后,最外层的查询返回该行之前的所有行


如果不想删除以前的所有行,可以添加注释掉的检查,以在上一个查询的最后一个ID之后继续。开始时,使用一个小于所有ID的值,例如-1。

一个查询怎么可能有多个结果集?你在说什么空值?很抱歉搞混了,我指的是一个select语句,而不是真正的查询。空案例是所有行都有相同的名称和年份,我查询我写的不工作。您能发布您真正期望的输出数据吗?您首先过滤id为11的行的逻辑是什么?id为11的行也与id为3的行具有相同的名称和年份。@如果id不是连续的;在6和11之间还有其他ID。干得好!仅供参考e.id>first.id,可以删除。
SELECT *
FROM e
WHERE /* id > last_id_from_previous_result AND */
      id < COALESCE((SELECT min(e.id)
                     FROM e
                     JOIN (SELECT id, name, year
                           FROM e
                           /* WHERE id > last_id_from_previous_result */
                           ORDER BY id
                           LIMIT 1) AS first
                       ON /* e.id > first.id AND */
                          (e.name != first.name OR
                           e.year != first.year)),
                    'infinite')