Postgresql 由于其他两列的差异而导致的列

Postgresql 由于其他两列的差异而导致的列,postgresql,Postgresql,我最近查找了一个查询,该查询返回了一个连续数字表中未使用的数字。有些可能会被删除并再次使用 它向我显示从数字到数字的结果。现在我想添加一个多少列 是否可以使用其他两个的别名添加此冒号?参见注释行 SELECT ( SELECT COALESCE(MAX(pnr)+1,1) FROM pord WHERE pnr < p.pnr ) AS pnr_from, p.pnr - 1 AS pnr_to -- (pnr_to - pnr_from) AS

我最近查找了一个查询,该查询返回了一个连续数字表中未使用的数字。有些可能会被删除并再次使用

它向我显示从数字到数字的结果。现在我想添加一个多少列

是否可以使用其他两个的别名添加此冒号?参见注释行

SELECT (
    SELECT COALESCE(MAX(pnr)+1,1)
    FROM pord
    WHERE pnr < p.pnr
    ) AS pnr_from,
     p.pnr - 1 AS pnr_to
--  (pnr_to - pnr_from) AS how_many <-------- ERROR: coloumn "pnr_to" doesn't exist
FROM pord p
WHERE p.pnr != 1 AND NOT EXISTS (
    SELECT 1
    FROM pord p2
    WHERE p2.pnr = p.pnr - 1
    )
    AND pnr > 300 AND pnr < 600
ORDER BY von
我必须在第一个SELECT子句中将完整查询添加为子选择还是有其他方法?

进行子查询:

SELECT pnr_from, pnr_to, pnr_to - pnr_from AS how_many
FROM (
    SELECT (
        SELECT COALESCE(MAX(pnr)+1,1)
        FROM pord
        WHERE pnr < p.pnr
        ) AS pnr_from,
         p.pnr - 1 AS pnr_to,
        von
    FROM pord p
    WHERE p.pnr != 1 AND NOT EXISTS (
        SELECT 1
        FROM pord p2
        WHERE p2.pnr = p.pnr - 1
        )
        AND pnr > 300 AND pnr < 600
) t
ORDER BY von

请注意,您必须选择要按其排序的列,以便外部查询可以看到该列。

听起来,使用lag函数可以简化此操作。您可以添加一些示例数据和预期输出吗?这似乎也是可能的。我会尝试,但我会接受波希米亚人的答案,因为我还不知道我会扩大我的选择多少。谢谢为我的数据库重新修改了它,它就可以正常工作了。正是我需要的!有点尴尬,因为我自己做不到。谢谢你!