如何从返回多行结果的SQL查询中获取指定的第3条记录?
SQL查询取指定行(第3行)的实现方案
注意:取指定行的前提是你已经为查询添加了稳定的排序规则,你给出的语句中已经按照
journeys.id排序,符合前提要求。如果排序规则不稳定(比如排序字段存在重复值),建议增加辅助排序字段,确保每次查询的结果顺序一致,避免取到的行不符合预期。另外OFFSET的计数从0开始,所以要取第N行的话,OFFSET的值为N-1,取第3行对应OFFSET=2。
通用标准语法(支持PostgreSQL、SQL Server 2012+、MySQL 8.0+、Oracle 12c+)
使用OFFSET跳过前N行,FETCH NEXT取指定行数即可:
SELECT (journeys.id, j_starting_channel) AS JER FROM JOURNEYS WHERE j_starting_channel = 'channel_name' ORDER BY journeys.id OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY;
MySQL低版本、SQLite适用语法
使用LIMIT OFFSET组合,写法更简洁:
SELECT (journeys.id, j_starting_channel) AS JER FROM JOURNEYS WHERE j_starting_channel = 'channel_name' ORDER BY journeys.id LIMIT 1 OFFSET 2; -- 也可以简写为 LIMIT 2,1
Oracle 11g及更早版本适用语法
旧版本Oracle不支持OFFSET语法,需要嵌套ROWNUM实现:
SELECT * FROM ( SELECT t.*, ROWNUM AS rn FROM ( SELECT (journeys.id, j_starting_channel) AS JER FROM JOURNEYS WHERE j_starting_channel = 'channel_name' ORDER BY journeys.id ) t WHERE ROWNUM <=3 ) WHERE rn =3;
内容的提问来源于stack exchange,提问作者Hadas Hamerovv
相关产品推荐
相关产品推荐

