列由于另外两列的差异

时间:2013-12-19 10:34:04

标签: postgresql

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

它向我显示结果pnr_frompnr_to个数字。现在我想添加一个“多少”coloumn。

是否可以使用其他两个别名添加此coloumn? (见注释行)

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子句中将完整查询添加为子选择,还是有其他方式?

1 个答案:

答案 0 :(得分:1)

制作子查询:

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

请注意您必须选择要订购的列,以便外部查询可以看到它。