Postgres:在结果集中查找特定行的位置?

时间:2010-09-05 01:22:50

标签: sql database postgresql pagination

我正在试图弄清楚如何获取查询中单个项目相对于查询返回的所有项目的相对位置。

例如,获得答案的长期方法是:

single_item = SELECT * FROM table WHERE id=65
result = SELECT * FROM table WHERE published_date < date_value
x=1
foreach(result as item):
    if(item.id == single_item.id):
        required_value = x
    endif
    x++
endforeach

是否有通过单个postgres查询获取required_value的简单方法?

1 个答案:

答案 0 :(得分:28)

使用analytic/ranking/windowing functionality - 8.4 documentation link

WITH summary AS (
   SELECT t.*,
          ROW_NUMBER() OVER(ORDER BY t.published_date) AS position
     FROM TABLE t)
SELECT s.*
  FROM summary s
 WHERE s.id = 65

在没有WITH语法的情况下替换:

SELECT s.*
  FROM (SELECT t.*,
               ROW_NUMBER() OVER(ORDER BY t.published_date) AS position
          FROM TABLE t) s
 WHERE s.id = 65

position列将是一个整数值,表示id值为65的记录的位置,基于published_date列的升序排列。如果您希望在存在关联时重置位置值,请将ROW_NUMBER()替换为RANK()