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

我想知道如何在查询获取单个项目相对于从查询返回的所有项目的相对位置.

例如,得到答案的长手方式是:

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

有没有一个简单的方法来获得require_value只是通过一个单一的postgres查询

解决方法

使用 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

位置列将是一个整数值,表示ID值为65的记录的位置,基于published_date列以升序排列.如果您希望在有关系时重复位置值,请将ROW_NUMBER()替换为RANK()

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03