2012-11-14 44 views
4

我試圖從表中獲取連續值組。我一直在試圖找到一個關於這個例子,但我沒有能夠在我的情況下使用它。獲取由最小值和最大值確定的組中的連續值

這是我有的表格的一小部分。

CardID  CardSerial     CardStateID AssignUserID Denomination 
    ----------- --------------------------- ----------- ------------ ------------- 
    2685680  214026002     3   81   10 
    2685681  214026003     3   81   10 
    2685682  214026004     3   81   10 
    2685683  214026005     3   81   10 
    2685684  214026006     3   81   10 
    2685778  214026100     3   81   10 
    2685779  214026101     3   81   10 
    2685780  214026102     3   81   10 
    2685781  214026103     3   81   10 
    2685782  214026104     3   81   10 
    2685878  214026200     3   81   10 
    2685879  214026201     3   81   10 
    2685880  214026202     3   81   10 
    2685881  214026203     3   81   10 
    2685882  214026204     3   81   10 
    2685883  214026205     3   81   10 
    2685884  214026206     3   81   10 

是我期待的結果是:

min value  max value  cant  Den 
    --------------- --------------- -------- ---- 
    214026002  214026006  5  10 
    214026100  214026104  5  10 
    214026200  214026206  7  10 

對我來說,難的是得到一組值,使像

select min(cardSerial), max(cardSerial), count(*), Den 
from Cards 
group by Den, GROUPING_VALUE_GENERATED 
+0

是什麼'GROUPING_VALUE_GENERATED'的方式具有實際意義的羣體? –

+0

什麼數據類型是'cardSerial'? – MatBailie

回答

3

查詢假設cardSerial是INT或其他數字數據類型...

WITH 
    sequenced AS 
(
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY Denomination ORDER BY cardSerial) AS sequence_id, 
    * 
    FROM 
    Cards 
) 
SELECT 
    min(cardSerial), 
    max(cardSerial), 
    count(*), 
    Denomination 
FROM 
    Sequenced 
GROUP BY 
    Denomination, 
    cardSerial - sequence_id 
ORDER BY 
    Denomination, 
    cardSerial - sequence_id 

如果它不是數字數據類型,請將其在查詢中轉換爲適當大的數字數據類型以允許cardSerial - sequence_id工作。


cardSerial - sequence_id計算如何給出了...

214026002 - 01 = 214026001 
214026003 - 02 = 214026001 
214026004 - 03 = 214026001 
214026005 - 04 = 214026001 
214026006 - 05 = 214026001 
214026100 - 06 = 214026094 
214026101 - 07 = 214026094 
214026102 - 08 = 214026094 
214026103 - 09 = 214026094 
214026104 - 10 = 214026094 
214026200 - 11 = 214026189 
214026201 - 12 = 214026189 
214026202 - 13 = 214026189 
214026203 - 14 = 214026189 
214026204 - 15 = 214026189 
214026205 - 16 = 214026189 
214026206 - 17 = 214026189 
+0

非常感謝!你以一種非常好的方式使它變得可行!謝謝! :)順便說一句... CardSerial它是一個int列,所以邏輯非常好! – user1257292

相關問題