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