2013-12-19 59 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