使用 rownum 表示我拉回了哪些行

Use rownum to indicate what rows I have pulled back

我有 table 个人,有名字和姓氏。

firstname lastname
a a
b b
c c
d d
e e
f f
g g
h h
i i
j j

我想从一个特定的点查询。例如。

SELECT FIRSTNAME, LASTNAME WHERE FIRSTNAME > 'e' order by firstname, lastname

太棒了。但我真正想要的是结果告诉我结果实际上来自第 6 行。我试过了

SELECT FIRSTNAME, LASTNAME, ROW_NUMBER(OVER ORDER BY lastname) WHERE FIRSTNAME > 'e' order by firstname, lastname

但在那种情况下,row_number 将从 1 开始,当我希望它告诉我这实际上是查询中的第 6 个元素时

SELECT FIRSTNAME, LASTNAME order by firstname, lastname

我想在不实际检索前五行的情况下执行此操作。

谢谢

您可以使用子查询来枚举行,然后在外部查询中进行过滤:

select *
from (
    select firstname, lastname, row_number() over(order by firstname, lastname) as rn
    from mytable
) t
where firstname > 'e' 
order by firstname, lastname

您可以使用子查询:

SELECT FIRSTNAME, LASTNAME, seqnum
FROM (SELECT e.*, ROW_NUMBER() OVER (ORDER BY firstname) as seqnum
      FROM e
     ) e
WHERE FIRSTNAME > 'e'
ORDER BY firstname, lastname

您可以在 SQL 末尾使用 OFFSETFETCH 子句来告诉 Oracle 您想要哪一行。

在你的例子中,你想要第 6 行,所以它将是:

SELECT firstname, lastname 
FROM mytable
ORDER BY firstname, lastname
-- Skip the first 5 rows and get me the next one (i.e., the 6th one)
OFFSET 5 ROWS FETCH NEXT 1 ROW ONLY;

在执行方面,这基本上与已发布的其他答案做同样的事情。它只是让开发人员的意图更加明确,imo。