我正在试图弄清楚如何获取查询中单个项目相对于查询返回的所有项目的相对位置。
例如,获得答案的长期方法是:
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
的简单方法?
答案 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()