Informix 的 Row_number() 函数

Posted

技术标签:

【中文标题】Informix 的 Row_number() 函数【英文标题】:Row_number() function for Informix 【发布时间】:2011-09-14 17:29:36 【问题描述】:

informix 是否有类似于 SQLServer 和 Oracle 的row_number() 的功能? 我必须使用row_number() between 两个值进行查询,但我不知道如何。

这是我在 SQLServer 中的查询:

SELECT col1, col2 
FROM (SELECT col1, col2, ROW_NUMBER() 
OVER (ORDER BY col1) AS ROWNUM FROM table) AS TB 
WHERE TB.ROWNUM BETWEEN value1 AND value2

一些帮助?

【问题讨论】:

Row numbers for a query in informix的可能重复 虽然可能的重复问题确实提到了ROW_NUMBER(),但这里的问题的一个方面是OVER子句,在另一个问题中肯定没有提到。 此查询是否寻求获取行号 10-19,然后是 20-29,然后...?如果是这样,那么您应该查看 SKIP 和 FIRST/LIMIT。 是的,第一时间得到前 100 个数字,得到 101-200 后...谢谢你的帮助,我会尝试使用 Skip 和 First/Limit 【参考方案1】:

如果您想获取第一行 1-100,然后是第 101-200 行,依此类推,那么您可以使用更直接(但非标准)的语法。其他 DBMS 有类似的符号,处理方式略有不同。

要获取第 101-200 行:

SELECT SKIP 100 FIRST 100 t.*
  FROM Table AS T
 WHERE ...other criteria...

您可以使用主机变量代替文字 100(或在不同迭代中为占位符使用不同值的单个预准备语句)。

【讨论】:

Jonathan,它帮助了我,但不适用于 Informix 9.40,你知道这个版本该怎么做吗? 如果 SKIP/FIRST 表示法不在 9.40 中,则修复方法是升级到当前受支持的版本(例如 11.70)。在一般 SQL 中确实没有简单的解决方法。在 ESQL/C 中,您可以使用 SCROLL CURSOR,然后使用 FETCH <cursor> ABSOLUTE 101,然后再使用 99 个 FETCH <cursor>(又名 FETCH <cursor> NEXT)操作。 我假设 SKIP/FIRST 指令仅适用于 IDS 而不是 SE? 是的,弗兰克。 SE 已经有 15 年没有新功能了。

以上是关于Informix 的 Row_number() 函数的主要内容,如果未能解决你的问题,请参考以下文章

informix SQL查询咨询

informix数据库锁表怎么处理

informix行锁会锁表吗

Informix 未来 [关闭]

informix数据库错误码-268与-239有啥不同

informix中怎么插入大量数据,再提交