Sqlite 从Select返回的多行中选择指定行

Sqlite 从Select返回的多行中选择指定行,sqlite,Sqlite,我有一个select语句,它返回多行。我需要从这些行中选择一个特定的行。我想写一些像 SELECT * FROM ( SELECT * FROM table WHERE x IS y ) WHERE row_in_selected_rows IS n; 这可能吗 请注意,我无法使用原始表中的rowid,因为我在第一条select语句返回的行中有所需行的索引,而不是原始表中的索引。您可以使用行号()窗口函数: select col1, col2, .... from ( SELECT *,

我有一个select语句,它返回多行。我需要从这些行中选择一个特定的行。我想写一些像

SELECT * FROM ( SELECT * FROM table WHERE x IS y ) WHERE row_in_selected_rows IS n;
这可能吗


请注意,我无法使用原始表中的rowid,因为我在第一条select语句返回的行中有所需行的索引,而不是原始表中的索引。

您可以使用
行号()
窗口函数:

select col1, col2, ....
from (
  SELECT *, row_number() over() rn 
  FROM table 
  WHERE x IS y
) t
where t.rn = 4
但这样就没有定义查询返回的行的顺序,因此第4行可以是任意一行。
正确的方法是:

select col1, col2, ....
from (
  SELECT *, row_number() over(order by somecolumn) rn 
  FROM table 
  WHERE x IS y
) t
where t.rn = 4
您还可以将
偏移量
限制一起使用:

SELECT * FROM ( SELECT * FROM table WHERE x IS y ) 
LIMIT 1 OFFSET 3;
它跳过前3行,只返回第4行,但同样地,
LIMIT
OFFSET
应与
ORDER BY
一起使用,如:

SELECT * FROM ( SELECT * FROM table WHERE x IS y ) 
ORDER BY somecolumn
LIMIT 1 OFFSET 3;

所选行中的行是n,这是什么意思?它是某种行号吗?如果是,查询中的编号是如何定义的:
SELECT*FROM table,其中x是y
?如果第一个选择返回5行,那么我需要选择,例如,返回的5行中的第4行。答案1是对的,您只需再次尝试,这看起来很有趣。我不熟悉“窗口功能”。刚刚发现这个限制1偏移3似乎是一个方向-我很熟悉这些!窗口函数也非常有用。也请选中此项:页面内的链接。选中行中的限制1偏移行效果良好。谢谢