2013-12-19 34 views
1

我最近查找了一个查询,该查询返回连续数字的表中未使用的数字。 (有些可能会被删除并重新使用。)由于其他两列的差异导致的列

它显示我的结果pnr_from号码为pnr_to号码。现在我想添加一个“多少”颜色。

是否可以通过使用其他两个别名来添加此色彩? (见注释行)

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

使用'lag()'函数可以使得这样的声音变得更简单。你能添加一些样本数据和预期的输出吗? –

+0

这看起来也是可能的。我会尝试,但我会接受波希米亚的答案,因为我还不知道我会扩展我的SELECT多少。谢谢! – Trollwut

回答

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 

注意你怎么也得选择您想要通过这样责令其对外部查询可见的列。

+0

重新修改它为我的数据库,它只是工作。正是我需要的!有点尴尬,因为我自己做不到。感谢那! – Trollwut